技术标签: MaxCompute SQL
本文介绍使用INSERT OVERWRITE和INSERT INTO两种命令更新表数据,主要内容包括:
INSERT INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2,...)][(co1name1,colname2,...)]
[VALUES (col1_value,col2_value,...),(col1_value,col2_value,...),...]
,
)分隔。此列值必须为常量,列值未指定时,缺省为NULL。
注意:通过VALUES
写入DATETIME、TIMESTAMP类型数据时,需要在VALUES
中指定类型名称,如下所示。
insert into table srcp (p='abc') values (datetime'2017-11-11 00:00:00',timestamp'2017-11-11 00:00:00.123456789');
1. 特定分区内插入数据:
insert into table sale_detail
partition (sale_date='202003', region='hangzhou')
values ('unique', 'user1', 1000),
('adidas', 'user2', 2000),
('zara', 'user3', 1500),
('veromoda', 'user1', 2000),
('nike', 'user4', 1000),
('ur', 'user2', 1400),
('ochirly', 'user1', 2000),
('lily', 'user3', 3000),
('onemore', "user2", 1200);
查询插入数据结果如下:
shop_name customer_id total_price sale_date region
+----------+------------+------------+----------+-------+
unique user1 1000.0 202003 hangzhou
adidas user2 2000.0 202003 hangzhou
zara user3 1500.0 202003 hangzhou
veromoda user1 2000.0 202003 hangzhou
nike user4 1000.0 202003 hangzhou
ur user2 1400.0 202003 hangzhou
ochirly user1 2000.0 202003 hangzhou
lily user3 3000.0 202003 hangzhou
onemore user2 1200.0 202003 hangzhou
2. 非特定分区插入数据:
insert into table sale_detail
partition (sale_date, region)
(shop_name, customer_id, total_price, sale_date, region)
values
('unique', 'user1', 1000, '202001', 'shanghai'),
('adidas', 'user2', 2000, '202001', 'shanghai'),
('zara', 'user3', 1500, '202001', 'shanghai');
查询插入结果:
shop_name customer_id total_price sale_date region
+----------+------------+------------+----------+-------+
unique user1 1000.0 202001 shanghai
adidas user2 2000.0 202001 shanghai
zara user3 1500.0 202001 shanghai
VALUES TABLE并不仅限于在INSERT
语句中使用,任何DML语句都可以使用。VALUES TABLE功能的使用方式如下:
下例中的values (…), (…) t(a, b)
相当于定义了一个名为t
,列为a
、b
,类型分别为STRING、BIGINT的表。列的类型需从VALUES列表中推导。
使用示例:
--删除已存在的表srcp。
drop table if exists srcp;
--创建分区表srcp。
create table if not exists srcp (key string,value bigint) partitioned by (p string);
--为表srcp中插入数据。
insert into table srcp partition (p) select concat(a,b), length(a)+length(b),'20170102' from values ('d',4),('e',5),('f',6) t(a,b);
--查询表srcp。
select * from srcp where p='20170102';
+-----+------------+---+
| key | value | p |
+-----+------------+---+
| d4 | 2 | 20170102 |
| e5 | 2 | 20170102 |
| f6 | 2 | 20170102 |
+-----+------------+---
在MaxCompute SQL处理数据的过程中,INSERT OVERWRITE/INTO
用于将计算的结果保存目标表中。
INSERT INTO
到Hash Clustering表。如果您需要插入少量测试数据,可以配合VALUES语句使用。INSERT OVERWRITE
不支持指定插入列的功能,暂时只能用INSERT INTO
。INSERT OVERWRITE|INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [(col1,col2 ...)]
select_statement
FROM from_statement;
使用示例:
1. 计算sale_detail
表中不同地区的销售额存入表sale_detail_insert中:
-- 创建目标表sale_detail_insert
create table sale_detail_insert like sale_detail;
-- 给目标表增加分区
alter table sale_detail_insert add partition (
sale_date='201912',
region='guangzhou'
);
-- 从源表sale_detail中取出数据插入目标表sale_detail_insert
insert overwrite table sale_detail_insert
partition (sale_date='201912', region='guangzhou')
select shop_name, customer_id, total_price
from sale_detail where region='beijing';
-- 查询插入的数据
select * from sale_detail_insert where region='guangzhou' and sale_date='201912';
查询插入的结果如下:
shop_name customer_id total_price sale_date region
+----------+------------+------------+----------+-------+
unique user1 1000.0 201912 guangzhou
adidas user2 2000.0 201912 guangzhou
zara user3 1500.0 201912 guangzhou
veromoda user1 2000.0 201912 guangzhou
nike user4 1000.0 201912 guangzhou
ur user2 1400.0 201912 guangzhou
ochirly user1 2000.0 201912 guangzhou
lily user3 3000.0 201912 guangzhou
onemore user2 1200.0 201912 guangzhou
2. 源表与目标表的对应关系依赖于在select
子句中列的顺序,而不是表与表之间列名的对应关系。例如如下语句:
insert overwrite table sale_detail_insert partition (sale_date='2018', region='china')
select customer_id, shop_name, total_price from sale_detail;
此时,会将sale_detail.customer_id
的数据插入sale_detail_insert.shop_name
,将sale_detail.shop_name
的数据插入sale_detail_insert.customer_id
。
3. 向某个分区插入数据时,分区列不允许出现在select
列表中。下面语句报错返回,sale_date,region
为分区列,不允许出现在静态分区的insert语句中。
insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
select shop_name, customer_id, total_price, sale_date, region from sale_detail;
4. partition
的值只能是常量,不可以出现表达式。以下为错误用法。
insert overwrite table sale_detail_insert partition (sale_date=datepart('2016-09-18 01:10:00', 'yyyy') , region='china')
select shop_name, customer_id, total_price from sale_detail;
如果您需要更新表数据到动态分区,请注意以下事项:
insert into partition
时,如果分区不存在,会自动创建分区。insert into partition
作业并发时,如果分区不存在,会自动创建分区,但只会成功创建一个分区。MaxCompute SQL支持在一个语句中将数据插入不同的目标表或者分区中实现多路输出。
命令格式
FROM from_statement
INSERT OVERWRITE | INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]
select_statement1 [FROM from_statement]
[INSERT OVERWRITE | INTO TABLE tablename2 [PARTITION (partcol1=val3, partcol2=val4 ...)]
select_statement2 [FROM from_statement]]
使用示例:
1. 将表sale_detail的数据插入到sale_detail_multi里的202003年及202004年中hangzhou和beijing的销售记录中:
-- 创建表sale_detail_multi
create table sale_detail_multi like sale_detail;
-- 开启全表扫描,仅此session有效
set odps.sql.allow.fullscan=ture;
-- 将表sale_detail中的数据插入到表sale_detail_multi
from sale_detail
insert overwrite table sale_detail_multi partition (sale_date='202003', region='hangzhou')
select shop_name, customer_id, total_price where region='hangzhou'
insert overwrite table sale_detail_multi partition (sale_date='202004', region='beijing')
select shop_name, customer_id, total_price where region='beijing';
select * from sale_detail_multi;
查询插入的数据如下:
shop_name customer_id total_price sale_date region
+----------+------------+------------+----------+-------+
unique user1 1000.0 202003 hangzhou
adidas user2 2000.0 202003 hangzhou
zara user3 1500.0 202003 hangzhou
veromoda user1 2000.0 202003 hangzhou
nike user4 1000.0 202003 hangzhou
ur user2 1400.0 202003 hangzhou
ochirly user1 2000.0 202003 hangzhou
lily user3 3000.0 202003 hangzhou
onemore user2 1200.0 202003 hangzhou
unique user1 1000.0 202004 beijing
adidas user2 2000.0 202004 beijing
zara user3 1500.0 202004 beijing
veromoda user1 2000.0 202004 beijing
nike user4 1000.0 202004 beijing
ur user2 1400.0 202004 beijing
ochirly user1 2000.0 202004 beijing
lily user3 3000.0 202004 beijing
onemore user2 1200.0 202004 beijing
2. 如果同一分区出现多次,如下语句,则报错返回:
from sale_detail
insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' )
select shop_name, customer_id, total_price
insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' )
select shop_name, customer_id, total_price;
3. 如果同一张表的不同分区,同时有insert overwrite和insert into操作,如下语句则报错返回:
from sale_detail
insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' )
select shop_name, customer_id, total_price
insert into table sale_detail_multi partition (sale_date='2011', region='china' )
select shop_name, customer_id, total_price;
在使用INSERT OVERWRITE语句将数据插入到分区表时,MaxCompute提供了如下两种方式:
INSERT OVERWRITE|INTO TABLE tablename PARTITION (partcol1, partcol2 ...)
select_statement FROM from_statement;
使用示例:
示例1:将源表中的数据插入到目标表中。在SQL运行之前,无法得知会产生哪些分区。只有在语句运行结束后,才能通过region字段产生的值确定产生的分区。
-- 创建目标表total_revenues
create table total_revenues (revenue bigint) partitioned by (region string);
-- 将源表sale_detail中的数据插入到目标表total_revenues
-- MaxCompute 2.0 支持total_price的自动类型转换,这里MaxCompute 1.0不支持
insert overwrite table total_revenues partition (region)
select cast(total_price as bigint) as revenue, region from sale_detail where region='hangzhou';
select * from total_revenues;
插入数据查询结果如下:
revenue region
+--------+-------+
1000 hangzhou
2000 hangzhou
1500 hangzhou
2000 hangzhou
1000 hangzhou
1400 hangzhou
2000 hangzhou
3000 hangzhou
1200 hangzhou
示例2:将源表中的数据插入到目标表中。多级分区,指定一级分区sale_date。
insert overwrite table sale_detail_dypart partition (sale_date='2013', region)
select shop_name,customer_id,total_price,region from sale_detail;
示例3:动态分区插入时,动态分区列必须在SELECT列表中,否则会执行失败,例如下面语句。
insert overwrite table sale_detail_dypart partition (sale_date='2013', region)
select shop_name,customer_id,total_price from sale_detail;
示例4:动态分区插入时,不能仅指定低级子分区,而动态插入高级分区,否则会执行失败,例如下面语句。
insert overwrite table sales partition (region='china', sale_date)
select shop_name,customer_id,total_price,sale_date from sale_detail;
文章浏览阅读920次。/**京东图床PHP代码*/if (class_exists('CURLFile')) { // php 5.5$post['file'] = new \CURLFile(realpath($_FILES['Filedata']['tmp_name']));} else {$post['file'] = '@'.realpath($_FILES['Filedata']['tmp_name']);}...
文章浏览阅读7.6k次,点赞9次,收藏80次。基于stm32f103的红外对管(TCRT5000)接收发送广西●河池学院广西高校重点实验室培训基地系统控制与信息处理重点实验室本篇博客来自河池学院: 智控无人机小组写作时间: 2020年8月8日一、模块简介在此模块中黑色灯管为接收端,白色灯管为发送端,可通过电位器旋钮调节检测距离,有效距离范围 2~30mm,检测角度35度,工作电压为 3.3V-5V。电源指示灯提示是否有电源,开关指示提示是是否有物体遮挡。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广_红外对管引脚
文章浏览阅读414次。因为数组大小不允许修改。所以Java 提供丰富的容器用来满足程序员多样化的需求,方便数据的引用管理。ListLinkedListArrayListMapHashMapHashTableWeakHashMapSetList LinkedList ArrayList Vector _此操作仅在应用容器上下文中有效vs2019
文章浏览阅读132次。这篇文章主要介绍了UBUNTU手动安装JDK的详细步骤,大家参考使用吧先去 Oracle下载Linux下的JDK压缩包,我下载的是jdk-7u4-linux-i586.tar.gz文件,下好后直接解压Step1:将解压好的jdk1.7.0_04文件夹用最高权限复制到/usr/lib/jvm目录里sudo cp -r ~/jdk1.7.0_04/ /usr/lib/jvm/Step2:配..._unb安装jdk
文章浏览阅读453次。Shell脚本2测试和判断1、测试 程序运行中经常需要根据实际情况来运行特定的命令或代码块。比如,判断某个文件或目录是否存在,如果不存在,则需要创建。例如:[root@shell ~]# ls /var/log/messages /var/log/messages [root@shell ~]# echo $? 0[root@shell ~]# ls /var/log/messages004 ls: 无法访问/var/log/messages004: 没有那个文件或目录 _普通用户没权限访问/var/log/messages
文章浏览阅读5.5k次。题注前言
文章浏览阅读1.8k次,点赞4次,收藏14次。public class P2认识复杂度和简单排序算法{ public static void main(String[] args){ int[] arr={1,2,1,3,2,5}; 只出现一次的数字III a=new 只出现一次的数字III(); System.out.println(a.s(arr)); }}/* 选择排序的基本思想: 一遍又一遍的遍历数组,将最大的移到当前列表的末尾 *1_左程云leetcode排名
文章浏览阅读2.3k次。原标题:12月16日!鸿蒙终于来了,五款产品公测、Mate40无缘 自从去年华为公布鸿蒙系统之后,手机市场就掀起了巨大风浪,毕竟iOS和安卓平分天下的局面已经很久了,如果华为能够推出属于自己的系统,属于国产的系统,那才是真正的崛起之时,所以当初仅仅是一个概念,就被吹上了天。12月16日,华为鸿蒙终于来了,它就是鸿蒙OS2.0版本,千呼万唤始出来。手机开发者Beta公测计划开启,有五款产品公测,分别..._mate40pro什么时候公测大模型
文章浏览阅读1.4k次。随机网络中通过Hebbian可塑性进行元学习(Meta-Learning through Hebbian Plasticity in Random Networks)概述Lifelong learning和适应性是生物行为的两个定义方面。现代强化学习(RL)方法已显示出在解决复杂任务方面的重大进步,但是,一旦训练结束,找到的解决方案通常是静态的,并且无法适应新的信息或应对干扰。尽管仍不能完全理解生物大脑如何从经验中学习和有效适应,但据信突触可塑性在此过程中起着重要作用。受到这种生物学机制的启发,我们提出_hebbian plasticity
文章浏览阅读1.1w次,点赞41次,收藏198次。前言:在深度学习中,数据的预处理是第一步,pytorch提供了非常规范的处理接口,本文将针对处理过程中的一些问题来进行说明,本文所针对的主要数据是图像数据集。本文的案例来源于车道线语义分割,采用的数据集是tusimple数据集,当然先需要将tusimple数据集写一个简单的脚本程序转换成指定的数据格式,如下:一、基本概述pytorch输入数据PipeLine一般遵循一个“三..._train_dataset.extend(load_org_dataset(train_org_path1))这个语句什么作用
文章浏览阅读1k次。参考博客:https://answers.ros.org/question/54178/how-to-build-just-one-package-using-catkin_make/1. catkin_make 构建单个包catkin_make --only-pkg-with-deps <target_package>构建单个包完成之后可以使用如下指..._apt-get install catkin_make
文章浏览阅读716次。MATLAB中bode函数的使用及实例ode :: Functions (Control System Toolbox) jar:file:///C:/Program%20Files/MATLAB/R2010a/help/toolbox/control/...bodeBode diagram of frequency responseSyntaxbodebo..._matlab里如何在bode图中显示每个点的gain margin和phase margin