云服务器内容精选

  • 请求示例 提交SQL作业,该作业执行的数据库为db1、队列为default,并为该作业设置标签workspace=space1;jobName=name1。 { "currentdb": "db1", "sql": "desc table1", "queue_name": "default", "conf": [ "dli.sql.shuffle.partitions = 200" ], "tags": [ { "key": "workspace", "value": "space1" }, { "key": "jobName", "value": "name1" } ] }
  • 响应示例 { "is_success": true, "message": "", "job_id": "8ecb0777-9c70-4529-9935-29ea0946039c", "job_type": "DDL", "job_mode":"sync", "schema": [ { "col_name": "string" }, { "data_type": "string" }, { "comment": "string" } ], "rows": [ [ "c1", "int", null ], [ "c2", "string", null ] ] }
  • 响应消息 表5 响应参数 参数名称 是否必选 参数类型 说明 is_success 是 Boolean 请求发送是否成功。“true”表示请求发送成功。 message 是 String 系统提示信息,执行成功时,信息可能为空。 job_id 是 String 此SQL语句将生成并提交一个新作业,返回此作业的ID,可用于获取作业状态和作业结果。 job_type 是 String 作业类型。 DDL DCL IMPORT EXPORT QUERY INSERT schema 否 Array of Map 当语句类型为DDL时,返回其结果的列名称及类型。 rows 否 Array of objects 当语句类型为DDL,且dli.sql.sqlasync.enabled=false时,直接返回其执行结果。但是最多只能返回1000行。 如果超过1000行,请通过异步方式获取结果。即,提交作业时配置 xxxx = true, 然后从 DLI 配置的作业桶中获取结果。结果在作业桶上的路径可以通过ShowSqlJobStatus接口返回值中的result_path来获取。结果的全量数据会自动导出到作业桶。 job_mode 否 String 作业执行模式: async:异步 sync:同步
  • 请求消息 表2 请求参数 参数名称 是否必选 参数类型 说明 sql 是 String 待执行的SQL语句。 currentdb 否 String SQL语句执行所在的数据库。当创建新数据库时,不需要提供此参数。 current_catalog 否 String 待提交作业的表的默认catalog。不填时默认使用DLI catalog。 queue_name 否 String 待提交作业的队列名称,名称只能包含数字、英文字母和下划线,但不能是纯数字,且不能以下划线开头。 conf 否 Array of Strings 用户以“key/value”的形式设置用于此作业的配置参数。目前支持的配置项请参考表3。 tags 否 Array of Objects 作业的标签。具体请参考表4。 engine_type 否 String 选择执行作业的引擎类型。 表3 conf参数说明 参数名称 默认值 描述 spark.sql.files.maxRecordsPerFile 0 要写入单个文件的最大记录数。如果该值为零或为负,则没有限制。 spark.sql.autoBroadcastJoinThreshold 209715200 配置执行连接时显示所有工作节点的表的最大字节大小。通过将此值设置为“-1”,可以禁用显示。 说明: 当前仅支持运行命令ANALYZE TABLE COMPUTE statistics noscan的配置单元元存储表,和直接根据数据文件计算统计信息的基于文件的数据源表。 spark.sql.shuffle.partitions 200 为连接或聚合过滤数据时使用的默认分区数。 spark.sql.dynamicPartitionOverwrite.enabled false 当前配置设置为“false”时,DLI在覆盖写之前,会删除所有符合条件的分区。例如,分区表中有一个“2021-01”的分区,当使用INSERT OVERWRITE语句向表中写入“2021-02”这个分区的数据时,会把“2021-01”的分区数据也覆盖掉。 当前配置设置为“true”时,DLI不会提前删除分区,而是在运行时覆盖那些有数据写入的分区。 spark.sql.files.maxPartitionBytes 134217728 读取文件时要打包到单个分区中的最大字节数。 spark.sql.badRecordsPath - Bad Records的路径。 spark.sql.legacy.correlated.scalar.query.enabled false 该参数设置为true: 当子查询中数据不重复的情况下,执行关联子查询,不需要对子查询的结果去重。 当子查询中数据重复的情况下,执行关联子查询,会提示异常,必须对子查询的结果做去重处理,比如max(),min()。 该参数设置为false: 不管子查询中数据重复与否,执行关联子查询时,都需要对子查询的结果去重,比如max(),min(),否则提示异常。 dli.jobs.sql.resubmit.enable null 通过设置该参数可以控制在driver故障、队列重启时Spark SQL作业是否重新提交。 false:禁用作业重试,所有类型的命令都不重新提交,一旦driver故障,作业将标记为失败(FAILED)。 true:启用作业重试,即在driver故障时,所有类型的作业都将重新提交。 注意: 如果配置为true,在执行INSERT等幂等类型的操作时(例如insert into,load data、update),可能会导致数据一致性问题。即driver故障后作业重试,导致driver故障前已插入的数据被重复写入。 spark.sql.optimizer.dynamicPartitionPruning.enabled true 该配置项用于启用或禁用动态分区修剪。在执行SQL查询时,动态分区修剪可以帮助减少需要扫描的数据量,提高查询性能。 配置为true时,代表启用动态分区修剪,SQL会在查询中自动检测并删除那些不满足WHERE子句条件的分区,适用于在处理具有大量分区的表时。 如果SQL查询中包含大量的嵌套left join操作,并且表有大量的动态分区时,这可能会导致在数据解析时消耗大量的内存资源,导致Driver节点的内存不足,并触发频繁的Full GC。 在这种情况下,可以配置该参数为false即禁用动态分区修剪优化,有助于减少内存使用,避免内存溢出和频繁的Full GC。 但禁用此优化可能会降低查询性能,禁用后Spark将不会自动修剪掉那些不满足条件的分区。 表4 tags参数 参数名称 是否必选 参数类型 说明 key 是 String 标签的键。 说明: 标签的键的最大长度为128个字符,标签的键可以包含任意语种字母、数字、空格和_ . : =+-@ ,但首尾不能含有空格,不能以_sys_开头。 value 是 String 说明: 标签值的最大长度为255个字符,标签的值可以包含任意语种字母、数字、空格和_ . : =+-@ ,但首尾不能含有空格。
  • 功能介绍 该API用于通过执行SQL语句的方式向队列提交作业。 作业包含以下类型:DDL、DCL、IMPORT、QUERY和INSERT。其中,IMPORT与导入数据(废弃)的功能一致,区别仅在于实现方式不同。 另外,用户可使用其他API来对作业进行查询和管理。具体操作有: 查询作业状态 查询作业详细信息 查询作业结果-方式二(废弃) 导出查询结果 查询所有作业 取消作业(推荐) 该API当响应消息中“job_type”为“DCL”时,为同步操作。
  • 示例代码 计算所有商品库存(items)的样本方差。命令示例如下: select var_samp(items) from warehouse; 返回结果如下: _c0 294.342355 与group by配合使用,对所有商品按照仓库(warehourseId)进行分组,并计算同组商品库存(items)的样本方差。命令示例如下: select warehourseId, var_samp(items) from warehourse group by warehourseId; 返回结果如下: warehouseId _c1 city1 18.23124 city2 16.23344 city3 11.43425
  • 示例代码 计算所有商品库存(items)的方差。命令示例如下: select variance(items) from warehouse; --等效于如下语句。 select var_pop(items) from warehouse; 返回结果如下: _c0 203.42352 与group by配合使用,对所有商品按照仓库(warehourseId)进行分组,并计算同组商品库存(items)的方差。命令示例如下: select warehourseId, variance(items) from warehourse group by warehourseId; --等效于如下语句。 select warehourseId, var_pop(items) from warehourse group by warehourseId; 返回结果如下: 1 2 3 4 warehouseId _c1 city1 19.23124 city2 17.23344 city3 12.43425
  • 示例代码 返回1692149997。 select unix_timestamp('2023-08-16 09:39:57') 假设当前系统时间为2023-08-16 10:23:16,返回1692152596。 select unix_timestamp(); 返回1692115200(即2023-08-16 00:00:00)。 select unix_timestamp("2023-08-16 10:56:45", "yyyy-MM-dd"); 表数据示例 select timestamp1, unix_timestamp(timestamp1) as date1_unix_timestamp, timestamp2, unix_timestamp(datetime1) as date2_unix_timestamp, timestamp3, unix_timestamp(timestamp1) as date3_unix_timestamp from database_t;输出: +------------+-------------------------+-----------------------+---------------------- --+------------------------------------+----------------------------+ | timestamp1| date1_unix_timestamp | timestamp2 | date2_unix_timestamp | timestamp3 | date3_unix_timestamp | +------------+-------------------------+-----------------------+-------------------------+------------------------------------+----------------------------+ | 2023-08-02 | 1690905600000 | 2023-08-02 11:09:14 | 1690945754793 | 2023-01-11 00:00:00.123456789 | 1673366400000 | | 2023-08-03 | 1690992000000 | 2023-08-02 11:09:31 | 1690945771994 | 2023-02-11 00:00:00.123456789 | 1676044800000 | | 2023-08-04 | 1691078400000 | 2023-08-02 11:09:41 | 1690945781270 | 2023-03-11 00:00:00.123456789 | 1678464000000 | | 2023-08-05 | 1691164800000 | 2023-08-02 11:09:48 | 1690945788874 | 2023-04-11 00:00:00.123456789 | 1681142400000 | | 2023-08-06 | 1691251200000 | 2023-08-02 11:09:59 | 1690945799099 | 2023-05-11 00:00:00.123456789 | 1683734400000 | +------------+-------------------------+-----------------------+--------------------------+-----------------------------------+----------------------------+
  • 参数说明 表1 参数说明 参数 是否必选 参数类型 说明 timestamp 否 DATE或STRING 代表待转换的日期值。 格式: yyyy-mm-dd yyyy-mm-dd hh:mi:ss yyyy-mm-dd hh:mi:ss.ff3 pattern 否 STRING 代表需要转换的格式。 pattern为空时,默认为yyyy-MM-dd hh:mm:ss格式。 format:格式为代表年月日时分秒的时间单位与任意字符的组合,其中: yyyy代表年份。 MM代表月份。 dd代表天。 hh代表小时。 mi代表分钟。 ss代表秒。
  • 参数说明 表1 参数说明 参数 是否必选 参数类型 说明 date 是 DATE或STRING 需要处理的日期。 格式: yyyy-mm-dd yyyy-mm-dd hh:mi:ss yyyy-mm-dd hh:mi:ss.ff3 format 是 STRING 代表需要转换的目标日期格式。 format:格式为代表年月日时分秒的时间单位与任意字符的组合,其中: yyyy代表年份。 MM代表月份。
  • 示例代码 去除字符串 yxabcxx 的左右空格。命令示例如下。 返回字符串yxabcxx。 select trim(' yxabcxx '); 等效于如下语句。 select trim(both from ' yxabcxx '); select trim(from ' yxabcxx '); 去除字符串yxabcxx左右两端所有字符都在集合xy中的子串。 返回abc,只要左右两端遇到x或者y就会被去掉。 select trim('xy', 'yxabcxx'); 等效于如下语句。 select trim(both 'xy' from 'yxabcxx'); 输入参数为NULL。命令示例如下。 返回NULL。 select trim(null); select trim(null, 'yxabcxx');
  • 示例代码 为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表salary,并添加数据,命令示例如下: CREATE EXTERNAL TABLE salary ( dept_id STRING, -- 部⻔ user_id string, -- 员⼯ID sal INT -- 薪⽔ ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile; 添加数据如下: d1,user1/user4,1000/6000 d1,user2/user5,2000/7000 d1,user3/user6,3000 d2,user4/user7,4000 d2,user5/user8,5000/8000 执行SQL select trans_array(1, "/", dept_id, user_id, sal) as (dept_id, user_id, sal) from salary; 返回结果如下: d1,user1,1000 d1,user4,6000 d1,user2,2000 d1,user5,7000 d1,user3,3000 d1,user6,NULL d2,user4,4000 d2,user7,NULL d2,user5,5000 d2,user8,8000
  • 参数说明 表1 参数说明 参数 是否必选 参数类型 说明 timestamp 是 DATE STRING TINYINT SMALLINT INT BIGINT 代表待处理的时间。 DATE或STRING类型的日期值,或TINYINT、SMALLINT、INT或BIGINT类型的时间戳。 格式: yyyy-mm-dd yyyy-mm-dd hh:mi:ss yyyy-mm-dd hh:mi:ss.ff3 timezone 是 STRING 代表需要转换的目标时区。
  • 示例代码 返回2023-08-16 10:54:36 select to_date1('2023-08-16 10:54:36','yyyy-mm-dd hh:mi:ss'); 返回2023-08-16 00:00:00。 select to_date1('2023-08-16','yyyy-mm-dd'); 返回NULL。 select to_date1(null); 返回2023-08-16。 select to_date1('2023-08-16 10:54:36');
  • 参数说明 表1 参数说明 参数 是否必选 参数类型 说明 date 是 STRING 要转换的字符串。 格式: yyyy-mm-dd yyyy-mm-dd hh:mi:ss yyyy-mm-dd hh:mi:ss.ff3 format 是 STRING 代表需要转换的日期格式。 STRING类型常量,不支持日期扩展格式。 format:格式为代表年月日时分秒的时间单位与任意字符的组合,其中: yyyy代表年份。 mm代表月份。 dd代表天。 hh代表小时。 mi代表分钟。 ss代表秒。