技术标签: 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;
文章浏览阅读482次。在web服务器中,每当客户端浏览器发送一个请求的时候,我们都要去创建一个servlet去完成相应的请求并返回响应,这样显得就很麻烦,有多少个请求就必须创建多少个servlet,其中的代码重复量太大了,所以,针对一个servlet可以处理多个请求,我们就封装了一个BaseServlet,他的作用就是:实现一个servlet可以处理多个客户端请求下面就是整个封装的过程package com.softeem.servlet;import javax.servlet.ServletException;_at com.softeem.wust.music.servlet.baseservlet.service(baseservlet.java:35)
文章浏览阅读165次。拥抱了IDEA却发现再也回不去Eclipse... 一、背景 还记得去年入职的时候,发现很多同事都在用Intellij IDEA,其实在那之前都已经接触过,只不过没有在开发中实际应用而已. 这时候我下定决心要拥抱IDEA了,尤其被它酷酷的黑色主题所吸引,感觉那才是我们程序猿的正确打开方式.二、说明 要想从使用了很久的Eclips..._用完idea后不会用eclipse
文章浏览阅读780次。数据提取响应内容的分类xml和html的区别xmlxml和html的区别常用数据解析方法jsonpath模块使用方法案例练习lxml模块和xpath语法谷歌浏览器xpath helper插件安装xpath的节点关系xpath语法基础节点选择语法xpath定位节点以及提取属性或文本内容的语法语法练习节点修饰语法响应内容的分类结构化的响应内容json字符串可以使用re、json等模块来提取特定数据xml字符串可以使用re、lxml等模块来提取特定数据非结构化的响应内容html字符_openvigil2.1使用教程
文章浏览阅读1.9k次。今天我想进入unbuntu系统学习一下linux的常用命令时发现竟然登录不进去了,昨晚还好好的,今天怎么就登不进去了。非常纳闷,于是想起上一次修改了environment文件,和profile文件,本人时linux菜鸟,修改了环境变量文件,以为是和windows环境变量一样,没想到导致登录老是循环在同一界面上,进不去,于是上网查了一下解决办法,发现原来是因为环境变量的问题。我具体的解决步骤为:_ubuntu14.04用户密码对但进不去
文章浏览阅读3.6k次。EMMC转接座使用:下面三个选项在“输入芯片印字”下面输入“EMMC”即可看到:EMMC_AUTO:速度8BIT(默认),智能识别-EMMC时就是它。EMMC_AUTO_4BIT:4BIT,建议大多数芯片选择它,稳定。EMMC_AUTO_1BIT:1BIT,以上两者均不能读时,可以选择它,虽速度慢但或许能挽救片内数据。另外,芯片型号后面_1/4/8BIT@FBGA153/FBGA169等(其中1/..._read emmc id failed
文章浏览阅读469次。踩坑的一天开发环境是Linux,在虚拟机里搭了个centos7,一键配置的lnmp在windows下利用phpstrom远程连接如何配置,步骤如下:首先打开界面,从顶部菜单栏选择Tools选项,选择Deployment,再选择configuration点击左上角加号选择SFTP输入一个昵称,随意,点击OK创建进来后,点击图示按钮进行配置输入服务器的ip,用户昵称,密码,点击testCconnection,测试是否能够连连通。能连通点击OK配置root path(网站根目录所在路径)和_phpstorm使用虚拟机启动php
文章浏览阅读2.3k次。启用 禁用plugin-container.exe firefox版本3.6.6,我最近发现多了个plugin-container.exe,手动结束这个进程后,firefox的flash插件立马崩溃。这个进程的作用描述如下:使某些plugin崩溃了也不影响firefox,不用重启fx,刷新下即可恢复正常。然而本功能比较占内存,不喜欢的可以禁用。 禁用方法:输入about:config,会有一个“失去质保”的提示,确认继续。,(fi_plugin container怎么关闭
文章浏览阅读1.2k次。前言如何实现类似淘宝、京东、拼多多的物流轨迹路线图,实现订单物流更直观更有效的展示。准备工作这里使用的快递100提供的API,需要一个快递100的账号。Step 1注册快递100账号,已有账号请忽略Step 2联系快递100的工作人员,开通对应的服务,里面有100单的测试单量,足够测试。Step 3引入快递100的sdk包,github源码<dependency> <groupId>com.github.kuaidi100-api</groupId_怎样生成快递路线图
文章浏览阅读1.1k次。问题还原:为什么会出现这种情况eclipse 有测试代码覆盖率的功能,也就是执行Run——>Coverage后会出现这样 的效果原因来自解决办法*将Coverage调出来,[window – show view – other – java – Coverage],点击删除即可..._eclipse测试爆黄色底纹
文章浏览阅读3.2k次。Centos7已经自带了LVS,因此只需要安装LVS管理程序 ipvsadm(理解为ipvs admin)并配置即可。(1)安装ipvsadmyum -y install ipvsadm(2)设置ipv4转发sysctl -w net.ipv4.ip_forward=1(3)关闭防火墙systemctl stop firewalld.service #停止firewa..._centos7安装lvs
文章浏览阅读524次。加载训练数据该示例使用 32×32 三角形图像的简单数据集进行说明。该数据集包括附带的像素标签真实值数据。使用 imageDatastore 和 pixelLabelDatastore 加载训练数据。dataFolder = fullfile(toolboxdir('vision'),'visiondata','triangleImages');imageFolderTrain = fullfil..._matlab 语义分割 trainingimages
文章浏览阅读1.3w次,点赞2次,收藏11次。项目框架图 下面开始贴代码了,不过先贴数据库^^-- Create table Oracle数据库create table QUARTZ_SCHEDULEJOB( id VARCHAR2(32), job_name VARCHAR2(32) not null, job_status NVARCHAR2(3) default 0 no_synchronized quartz