云服务器内容精选

  • 注意事项 要删除表中的数据,用户必须对它有DELETE权限。同样也必须有USING子句引用的表以及condition上读取的表的SELECT权限。 对于复制表,仅支持两种场景下的DELETE操作: 有主键约束的场景。 执行计划能下推的场景。 对于列存表,暂时不支持RETURNING子句。 避免使用UPDATE/DELETE大批量刷新和删除数据,考虑使用TRUNCATE PARTITION/DROP PARTITION代替。 更多开发设计规范参见总体开发设计规范。
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名字引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名字引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS ( {select | values | insert | update | delete} ) – with_query_name指定子查询生成的结果集名字,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优。 ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 table_name 目标表的名字(可以有模式修饰)。 取值范围:已存在的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 condition 一个返回boolean值的表达式,用于判断哪些行需要被删除。 WHERE CURRENT OF cursor_name 当前不支持,仅保留语法接口。 output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 语法格式 1 2 3 4 5 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 示例 insert into h0 select 1, 'a1', 20; -- insert static partition insert into h_p0 partition(dt = '2021-01-02') select 1, 'a1'; -- insert dynamic partition insert into h_p0 select 1, 'a1', dt; -- insert dynamic partition insert into h_p1 select 1 as id, 'a1', '2021-01-03' as dt, '19' as hh; -- insert overwrite table insert overwrite table h0 select 1, 'a1', 20; -- insert overwrite table with static partition insert overwrite h_p0 partition(dt = '2021-01-02') select 1, 'a1'; -- insert overwrite table with dynamic partition insert overwrite table h_p1 select 2 as id, 'a2', '2021-01-03' as dt, '19' as hh;
  • 注意事项 写入模式:Hudi对于设置了主键的表支持三种写入模式,用户可以设置参数hoodie.sql.insert.mode来指定Insert模式,默认为upsert。 strict模式,Insert语句将保留COW表的主键唯一性约束,不允许重复记录。如果在插入过程中已经存在记录,则会为COW表执行HoodieDuplicateKeyException;对于MOR表,该模式与upsert模式行为一致。 non-strict模式,对主键表采用insert处理。 upsert模式,对于主键表的重复值进行更新操作。 在执行spark-sql时,用户可以设置“hoodie.sql.bulk.insert.enable = true”和“hoodie.sql.insert.mode = non-strict”来开启bulk insert作为Insert语句的写入方式。 也可以通过直接设置hoodie.datasource.write.operation的方式控制insert语句的写入方式,包括bulk_insert、insert、upsert。使用这种方式控制hoodie写入,需要注意执行完SQL后,必须执行reset hoodie.datasource.write.operation;重置Hudi的写入方式,否则该参数会影响其他SQL的执行。
  • 参数说明 statement 指定要分析的SQL语句。 ANALYZE boolean | ANALYSE boolean 显示实际运行时间和其他统计数据。 取值范围: TRUE(缺省值):显示实际运行时间和其他统计数据。 FALSE:不显示。 VERBOSE boolean 显示有关计划的额外信息。 取值范围: TRUE(缺省值):显示额外信息。 FALSE:不显示。 COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 取值范围: TRUE(缺省值):显示估计总成本和宽度。 FALSE:不显示。 CPU boolean 打印CPU的使用情况的信息。 取值范围: TRUE(缺省值):显示CPU的使用情况。 FALSE:不显示。 DETAIL boolean 打印DN上的信息。 取值范围: TRUE(缺省值):打印DN的信息。 FALSE:不打印。 8.2.1及以上集群版本支持explain打开Detail开关时,执行计划中会显示倾斜值比对耗时。 NODES boolean 打印query执行的节点信息。 取值范围: TRUE(缺省值):打印执行的节点的信息。 FALSE:不打印。 NUM_NODES boolean 打印执行中的节点的个数信息。 取值范围: TRUE(缺省值):打印DN个数的信息。 FALSE:不打印。 BUFFERS boolean 包括缓冲区的使用情况的信息。 取值范围: TRUE:显示缓冲区的使用情况。 FALSE(缺省值):不显示。 TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。 取值范围: TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。 FALSE:不显示。 PLAN 是否将执行计划存储在plan_table中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 取值范围: ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUC CES S。 OFF:不存储执行计划,将执行计划打印到当前屏幕。 FORMAT 指定输出格式。 取值范围:TEXT,XML,JSON和YAML。 默认值:TEXT PERFORMANCE 使用此选项时,即打印执行中的所有相关信息。 STATS boolean 打印复现SQL语句的执行计划所需的信息,包括对象定义、统计信息、配置参数等,通常用于定位问题。 取值范围: TRUE(缺省值):显示复现SQL语句的执行计划所需的信息。 FALSE:不显示。
  • 语法格式 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求: 1 EXPLAIN [ ( option [, ...] ) ] statement; 其中选项option子句的语法为: 1 2 3 4 5 6 7 8 9 10 11 12 ANALYZE [ boolean ] | ANALYSE [ boolean ] | VERBOSE [ boolean ] | COSTS [ boolean ] | CPU [ boolean ] | DETAIL [ boolean ] | NODES [ boolean ] | NUM_NODES [ boolean ] | BUFFERS [ boolean ] | TIMING [ boolean ] | PLAN [ boolean ] | FORMAT { TEXT | XML | JSON | YAML } 显示SQL语句的执行计划,且要按顺序给出选项: 1 EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement; 显示复现SQL语句的执行计划所需的信息,通常用于定位问题。STATS选项必须单独使用: 1 EXPLAIN ( STATS [ boolean ] ) statement;
  • 功能描述 显示SQL语句的执行计划。 执行计划将显示SQL语句所引用的表采用的扫描方式,如:简单的顺序扫描、索引扫描等。如果引用了多个表,执行计划还会显示使用的JOIN算法。 执行计划的最关键部分是语句的预计执行开销,即计划生成器估算执行该语句将花费多长的时间。 若指定了ANALYZE选项,则该语句会被执行,然后根据实际的运行结果显示统计数据,包括每个计划节点内时间总开销(毫秒为单位)和实际返回的总行数。这对于判断计划生成器是否接近现实非常有用。
  • 参数说明 statement 指定要分析的SQL语句。 ANALYZE boolean | ANALYSE boolean 显示实际运行时间和其他统计数据。 取值范围: TRUE(缺省值):显示实际运行时间和其他统计数据。 FALSE:不显示。 VERBOSE boolean 显示有关计划的额外信息。 取值范围: TRUE(缺省值):显示额外信息。 FALSE:不显示。 COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 取值范围: TRUE(缺省值):显示估计总成本和宽度。 FALSE:不显示。 CPU boolean 打印CPU的使用情况的信息。 取值范围: TRUE(缺省值):显示CPU的使用情况。 FALSE:不显示。 DETAIL boolean 打印DN上的信息。 取值范围: TRUE(缺省值):打印DN的信息。 FALSE:不打印。 NODES boolean 打印query执行的节点信息。 取值范围: TRUE(缺省值):打印执行的节点的信息。 FALSE:不打印。 NUM_NODES boolean 打印执行中的节点的个数信息。 取值范围: TRUE(缺省值):打印DN个数的信息。 FALSE:不打印。 BUFFERS boolean 包括缓冲区的使用情况的信息。 取值范围: TRUE:显示缓冲区的使用情况。 FALSE(缺省值):不显示。 TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。 取值范围: TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。 FALSE:不显示。 PLAN 是否将执行计划存储在plan_table中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 取值范围: ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。 OFF:不存储执行计划,将执行计划打印到当前屏幕。 FORMAT 指定输出格式。 取值范围:TEXT,XML,JSON和YAML。 默认值:TEXT PERFORMANCE 使用此选项时,即打印执行中的所有相关信息。 STATS boolean 打印复现SQL语句的执行计划所需的信息,包括对象定义、统计信息、配置参数等,通常用于定位问题。 取值范围: TRUE(缺省值):显示复现SQL语句的执行计划所需的信息。 FALSE:不显示。
  • 语法格式 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求: 1 EXPLAIN [ ( option [, ...] ) ] statement; 其中选项option子句的语法为: 1 2 3 4 5 6 7 8 9 10 11 12 ANALYZE [ boolean ] | ANALYSE [ boolean ] | VERBOSE [ boolean ] | COSTS [ boolean ] | CPU [ boolean ] | DETAIL [ boolean ] | NODES [ boolean ] | NUM_NODES [ boolean ] | BUFFERS [ boolean ] | TIMING [ boolean ] | PLAN [ boolean ] | FORMAT { TEXT | XML | JSON | YAML } 显示SQL语句的执行计划,且要按顺序给出选项: 1 EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement; 显示复现SQL语句的执行计划所需的信息,通常用于定位问题。STATS选项必须单独使用: 1 EXPLAIN ( STATS [ boolean ] ) statement;
  • 功能描述 显示SQL语句的执行计划。 执行计划将显示SQL语句所引用的表采用的扫描方式,如:简单的顺序扫描、索引扫描等。如果引用了多个表,执行计划还会显示使用的JOIN算法。 执行计划的最关键部分是语句的预计执行开销,这是计划生成器估算执行该语句将花费多长的时间。 若指定了ANALYZE选项,则该语句会被执行,然后根据实际的运行结果显示统计数据,包括每个计划节点内时间总开销(毫秒为单位)和实际返回的总行数。这对于判断计划生成器是否接近现实非常有用。
  • 示例 将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中: 1 COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat'; 将tpcds.ship_mode 输出到stdout: 1 COPY tpcds.ship_mode TO stdout; 创建tpcds.ship_mode_t1表: 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE tpcds.ship_mode_t1 ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE) DISTRIBUTE BY HASH(SM_SHIP_MODE_SK ); 从stdin拷贝数据到表tpcds.ship_mode_t1: 1 COPY tpcds.ship_mode_t1 FROM stdin; 从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1: 1 COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat'; 从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true'): 1 COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true'); 从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header): 1 COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data; 从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header),保留末尾 \t 字符: COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' (FORMAT 'fixed', FORMATTER (SM_SHIP_MODE_SK(0,2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)), PRESERVE_BLANKS‘true', HEADER 'true', IGNORE_EXTRA_DATA 'true'); 将tpcds.ship_mode_t1导出为OBS的 '/bucket/path/'路径上的TEXT格式文件ds_ship_mode.dat。需要指定包含OBS访问信息的“server”option参数: 1 COPY tpcds.ship_mode_t1 TO '/bucket/path/ds_ship_mode.dat' WITH (format 'text', encoding 'utf8', server 'obs_server'); 将tpcds.ship_mode_t1导出为OBS的 '/bucket/path/'路径上的 CS V格式文件。需要指定包含OBS访问信息的“server”option参数。其中文件包含标题行,包含BOM头,单文件最大行数1000行(超出1000行生成新的文件),自定义文件名前缀为“justprefix”: 1 COPY (select * from tpcds.ship_mode_t1 where SM_SHIP_MODE_SK=1060) TO '/bucket/path/' WITH (format 'csv', header 'on', encoding 'utf8', server 'obs_server', bom 'on', maxrow '1000', fileprefix 'justprefix'); 删除tpcds.ship_mode_t1: 1 DROP TABLE tpcds.ship_mode_t1;
  • 语法格式 从一个文件拷贝数据到一个表: 1 2 3 4 5 6 7 8 9 10 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ LOG ERRORS data ] [ REJECT LIMIT 'limit' ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ ( option [, ...] ) | copy_option [ ...] ] 可以任意排列组合。 把一个表的数据拷贝到一个文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY query TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ ( option [, ...] ) | copy_option [ ...] ] 可以任意排列组合。 其中可选参数option子句语法为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 FORMAT 'format_name' | OIDS [ boolean ] | DELIMITER 'delimiter_character' | NULL 'null_string' | HEADER [ boolean ] | FILEHEADER 'header_file_string' | FREEZE [ boolean ] | QUOTE 'quote_character' | ESCAPE 'escape_character' | EOL 'newline_character' | NOESCAPING [ boolean ] | FORCE_QUOTE { ( column_name [, ...] ) | * } | FORCE_NOT_NULL ( column_name [, ...] ) | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA [ boolean ] | FILL_MISSING_FIELDS [ boolean ] | COMPATIBLE_ILLEGAL_CHARS [ boolean ] | PRESERVE_BLANKS [ boolean ] | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' | SERVER 'obs_server_string' | BOM [ boolean ] | MAXROW [ integer ] | FILEPREFIX 'file_prefix_string' 其中可选参数copy_option子句语法为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 OIDS | NULL 'null_string' | HEADER | FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...] | FORCE_QUOTE { column_name [, ...] | * } | BINARY | CSV | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character' | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS | COMPATIBLE_ILLEGAL_CHARS | PRESERVE_BLANKS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
  • 注意事项 以安全模式(云上安全模式不支持关闭)启动CN、DN的开关,那么当前模式下禁止使用COPY FROM FILENAME或COPY TO FILENAME语法,可采用\copy的方式进行规避,请参考如何使用\copy导入导出中的示例。 COPY只能用于表,不能用于视图。 对任何要插入数据的表必须有插入权限。 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为这些字段插入缺省值。 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\.)表示输入结束。 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。 数据的结束可以用一个只包含反斜杠和句点(\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。 COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\\N。
  • 语法格式 1 2 3 4 5 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];