- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- DLI作业开发流程
- 准备工作
- 创建弹性资源池和队列
- 创建数据库和表
- 数据迁移与数据传输
- 配置DLI访问其他云服务的委托权限
- 使用DLI提交SQL作业
- 使用DLI提交Flink作业
- 使用DLI提交Spark作业
- 使用Notebook实例提交DLI作业
- 使用CES监控DLI服务
- 使用AOM监控DLI服务
- 使用CTS审计DLI服务
- 权限管理
- DLI常用管理操作
- 最佳实践
-
开发指南
- 使用客户端工具连接DLI
- SQL作业开发指南
- Flink作业开发指南
- Spark Jar作业开发指南
-
语法参考
-
Spark SQL语法参考
- Spark SQL常用配置项说明
- Spark SQL语法概览
- Spark开源命令支持说明
- 数据库相关
- 表相关
- 数据相关
- 导出查询结果
- 跨源连接相关
- 视图相关
- 查看计划
- 数据权限相关
- 数据类型
- 自定义函数
-
内置函数
-
日期函数
- 日期函数概览
- add_months
- current_date
- current_timestamp
- date_add
- dateadd
- date_sub
- date_format
- datediff
- datediff1
- datepart
- datetrunc
- day/dayofmonth
- from_unixtime
- from_utc_timestamp
- getdate
- hour
- isdate
- last_day
- lastday
- minute
- month
- months_between
- next_day
- quarter
- second
- to_char
- to_date
- to_date1
- to_utc_timestamp
- trunc
- unix_timestamp
- weekday
- weekofyear
- year
-
字符串函数
- 字符串函数概览
- ascii
- concat
- concat_ws
- char_matchcount
- encode
- find_in_set
- get_json_object
- instr
- instr1
- initcap
- keyvalue
- length
- lengthb
- levenshtein
- locate
- lower/lcase
- lpad
- ltrim
- parse_url
- printf
- regexp_count
- regexp_extract
- replace
- regexp_replace
- regexp_replace1
- regexp_instr
- regexp_substr
- repeat
- reverse
- rpad
- rtrim
- soundex
- space
- substr/substring
- substring_index
- split_part
- translate
- trim
- upper/ucase
- 数学函数
- 聚合函数
- 分析窗口函数
- 其他函数
-
日期函数
- SELECT
-
标示符
- aggregate_func
- alias
- attr_expr
- attr_expr_list
- attrs_value_set_expr
- boolean_expression
- class_name
- col
- col_comment
- col_name
- col_name_list
- condition
- condition_list
- cte_name
- data_type
- db_comment
- db_name
- else_result_expression
- file_format
- file_path
- function_name
- groupby_expression
- having_condition
- hdfs_path
- input_expression
- input_format_classname
- jar_path
- join_condition
- non_equi_join_condition
- number
- num_buckets
- output_format_classname
- partition_col_name
- partition_col_value
- partition_specs
- property_name
- property_value
- regex_expression
- result_expression
- row_format
- select_statement
- separator
- serde_name
- sql_containing_cte_name
- sub_query
- table_comment
- table_name
- table_properties
- table_reference
- view_name
- view_properties
- when_expression
- where_condition
- window_function
- 运算符
-
Flink SQL语法参考
- Flink Opensource SQL1.15语法参考
- Flink Opensource SQL1.12语法参考
- Flink Opensource SQL1.10语法参考
-
HetuEngine SQL语法参考
-
HetuEngine SQL语法
- 使用前必读
- 数据类型
-
DDL 语法
- CREATE SCHEMA
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE LIKE
- CREATE VIEW
- ALTER TABLE
- ALTER VIEW
- ALTER SCHEMA
- DROP SCHEMA
- DROP TABLE
- DROP VIEW
- TRUNCATE TABLE
- COMMENT
- VALUES
- SHOW语法使用概要
- SHOW SCHEMAS(DATABASES)
- SHOW TABLES
- SHOW TBLPROPERTIES TABLE|VIEW
- SHOW TABLE/PARTITION EXTENDED
- SHOW FUNCTIONS
- SHOW PARTITIONS
- SHOW COLUMNS
- SHOW CREATE TABLE
- SHOW VIEWS
- SHOW CREATE VIEW
- DML 语法
- DQL 语法
- 辅助命令语法
- 预留关键字
- SQL函数和操作符
- 数据类型隐式转换
- 附录
-
HetuEngine SQL语法
- Hudi SQL语法参考
- Delta SQL语法参考
-
Spark SQL语法参考
-
API参考
- API使用前必读
- API概览
- 如何调用API
- API快速入门
- 权限相关API
- 全局变量相关API
- 资源标签相关API
- 增强型跨源连接相关API
- 跨源认证相关API
- 弹性资源池相关API
- 队列相关API(推荐)
- SQL作业相关API
- SQL模板相关API
- Flink作业相关API
- Flink作业模板相关API
- Flink作业管理相关API
- Spark作业相关API
- Spark作业模板相关API
- 权限策略和授权项
- 历史API
- 公共参数
- SDK参考
- 场景代码示例
-
常见问题
- DLI产品咨询类
- DLI弹性资源池和队列类
-
DLI数据库和表类
- 为什么在DLI控制台中查询不到表?
- OBS表压缩率较高怎么办?
- 字符码不一致导致数据乱码怎么办?
- 删除表后再重新创建同名的表,需要对操作该表的用户和项目重新赋权吗?
- DLI分区内表导入的文件不包含分区列的数据,导致数据导入完成后查询表数据失败怎么办?
- 创建OBS外表,由于OBS文件中的某字段存在换行符导致表字段数据错误怎么办?
- join表时没有添加on条件,造成笛卡尔积查询,导致队列资源爆满,作业运行失败怎么办?
- 手动在OBS表的分区目录下添加了数据,但是无法查询到数据怎么办?
- 为什么insert overwrite覆盖分区表数据的时候,覆盖了全量数据?
- 跨源连接RDS表中create_date字段类型是datetime,为什么DLI中查出来的是时间戳呢?
- SQL作业执行完成后,修改表名导致datasize不正确怎么办?
- 从DLI导入数据到OBS,数据量不一致怎么办?
-
增强型跨源连接类
- 增强型跨源连接绑定队列失败怎么办?
- DLI增强型跨源连接DWS失败怎么办?
- 创建跨源成功但测试网络连通性失败怎么办?
- 怎样配置DLI队列与数据源的网络连通?
- 为什么DLI增强型跨源连接要创建对等连接?
- DLI创建跨源连接,绑定队列一直在创建中怎么办?
- 新建跨源连接,显示已激活,但使用时提示communication link failure错误怎么办?
- 跨源访问MRS HBase,连接超时,日志未打印错误怎么办?
- DLI跨源连接报错找不到子网怎么办?
- 跨源RDS表,执行insert overwrite提示Incorrect string value错误怎么办?
- 创建RDS跨源表提示空指针错误怎么办?
- 对跨源DWS表执行insert overwrite操作,报错:org.postgresql.util.PSQLException: ERROR: tuple concurrently updated
- 通过跨源表向CloudTable Hbase表导入数据,executor报错:RegionTooBusyException
- 通过DLI跨源写DWS表,非空字段出现空值异常怎么办?
- 更新跨源目的端源表后,未同时更新对应跨源表,导致insert作业失败怎么办?
- RDS表有自增主键时怎样在DLI插入数据?
-
SQL作业类
- SQL作业开发类
-
SQL作业运维类
- 用户导表到OBS报“path obs://xxx already exists”错误
- 对两个表进行join操作时,提示:SQL_ANALYSIS_ERROR: Reference 't.id' is ambiguous, could be: t.id, t.id.;
- 执行查询语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
- 执行查询语句报错:There should be at least one partition pruning predicate on partitioned table XX.YYY
- LOAD数据到OBS外表报错:IllegalArgumentException: Buffer size too small. size
- SQL作业运行报错:DLI.0002 FileNotFoundException
- 用户通过CTAS创建hive表报schema解析异常错误
- 在DataArts Studio上运行DLI SQL脚本,执行结果报org.apache.hadoop.fs.obs.OBSIOException错误
- 使用CDM迁移数据到DLI,迁移作业日志上报UQUERY_CONNECTOR_0001:Invoke DLI service api failed错误
- SQL作业访问报错:File not Found
- SQL作业访问报错:DLI.0003: AccessControlException XXX
- SQL作业访问外表报错:DLI.0001: org.apache.hadoop.security.AccessControlException: verifyBucketExists on {{桶名}}: status [403]
- 执行SQL语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
-
Flink作业类
- Flink作业咨询类
-
Flink SQL作业类
- 怎样将OBS表映射为DLI的分区表?
- Flink SQL作业Kafka分区数增加或减少,怎样不停止Flink作业实现动态感知?
- 在Flink SQL作业中创建表使用EL表达式,作业运行提示DLI.0005错误怎么办?
- Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
- Flink SQL作业运行失败,日志中有connect to DIS failed java.lang.IllegalArgumentException: Access key cannot be null错误
- Flink SQL作业消费Kafka后sink到es集群,作业执行成功,但未写入数据
- Flink Opensource SQL如何解析复杂嵌套 JSON?
- Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致?
- Flink Opensource SQL Elasticsearch结果表failure-handler参数填写retry_rejected导致提交失败
- Kafka Sink配置发送失败重试机制
- 如何在一个Flink作业中将数据写入到不同的Elasticsearch集群中?
- 作业语义检验时提示DIS通道不存在怎么处理?
- Flink jobmanager日志一直报Timeout expired while fetching topic metadata怎么办?
- Flink Jar作业类
- Flink作业性能调优类
-
Spark作业相类
- Spark作业开发类
-
Spark作业运维类
- 运行Spark作业报java.lang.AbstractMethodError
- Spark作业访问OBS数据时报ResponseCode: 403和ResponseStatus: Forbidden错误
- 有访问OBS对应的桶的权限,但是Spark作业访问时报错 verifyBucketExists on XXXX: status [403]
- Spark作业运行大批量数据时上报作业运行超时异常错误
- 使用Spark作业访问sftp中的文件,作业运行失败,日志显示访问目录异常
- 执行作业的用户数据库和表权限不足导致作业运行失败
- 为什么Spark3.x的作业日志中打印找不到global_temp数据库
- 在使用Spark2.3.x访问元数据时,DataSource语法创建avro类型的OBS表创建失败
- DLI资源配额类
- DLI权限管理类
- DLI API类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
数组函数和运算符
下标操作符:[]
描述:下标操作符用于访问数组中的元素,并从1开始建立索引。
select myarr[5] from (values array [1,4,6,78,8,9],array[2,4,6,8,10,12]) as t(myarr); _col0 ------- 8 10
Concatenation Operator : ||
|| 操作符用于将相同类型的数组或数值串联起来。
SELECT ARRAY[1] || ARRAY[2]; _col0 -------- [1, 2] (1 row) SELECT ARRAY[1] || 2; _col0 -------- [1, 2] (1 row) SELECT 2 || ARRAY[1]; _col0 -------- [2, 1] (1 row)
Array函数
下标运算符: []
下标运算符 [] 用于获取数组中对应位置的值。
SELECT ARRAY[5,3,41,6][1] AS first_element; -- 5
Concatenation Operator: ||
The || operator is used to concatenate an array with an array or an element of the same type:
SELECT ARRAY[1]||ARRAY[2];-- [1, 2] SELECT ARRAY[1]||2; -- [1, 2] SELECT 2||ARRAY[1];-- [2, 1]
- array_contains(x, element) → boolean
描述:如果数组x中包含element,则返回true。
select array_contains (array[1,2,3,34,4],4); -- true
- all_match(array(T), function(T, boolean)) → boolean
描述:返回是否数组的所有元素满足给定的断言函数。如果都满足断言函数或者数组为空时,返回true, 如果有一个或者多个元素不满足断言函数,则返回false。当断言函数对于一个或者多个元素的结果是NULL时,返回结果也是NULL:
select all_match(a, x-> true) from (values array[]) t(a); -- true select all_match(a, x-> x>2) from (values array[4,5,7]) t(a); -- true select all_match(a, x-> x>2) from (values array[1,5,7]) t(a); -- false select all_match(a, x-> x>1) from (values array[NULL, NULL ,NULL]) t(a); --NULL
- any_match(array(T), function(T, boolean)) → boolean
描述:返回数组是否存在满足断言的元素。当一个或多个元素满足断言时,返回true。都不满足断言或者数组为空时,返回false。当断言函数对于一个或者多个元素的结果是NULL时,返回结果也是NULL:
select any_match(a, x-> true) from (values array[]) t(a); -- false select any_match(a, x-> x>2) from (values array[0,1,2]) t(a); -- false select any_match(a, x-> x>2) from (values array[1,5,7]) t(a); -- true select any_match(a, x-> x>1) from (values array[NULL, NULL ,NULL]) t(a); -- NULL
- array_distinct(x) → array
描述:输出去重后的数组x。
select array_distinct(array [1,1,1,1,1,1,3,3,3,33,4,5,6,6,6,6]);-- [1, 3, 33, 4, 5, 6]
- array_intersect(x, y) → array
描述:返回两个数组去重后的交集。
select array_intersect(array [1,3,5,7,9],array [1,2,3,4,5]); _col0 ----------- [1, 3, 5] (1 row)
- array_union(x, y) → array
描述:返回两个数组的并集。
select array_union(array [1,3,5,7,9],array [1,2,3,4,5]); _col0 ----------------------- [1, 3, 5, 7, 9, 2, 4] (1 row)
- array_except(x, y) → array
描述:返回去重后的在x中但不在y中的元素数组。
select array_except(array [1,3,5,7,9],array [1,2,3,4,5]); _col0 -------- [7, 9] (1 row)
- array_join(x, delimiter, null_replacement) → varchar
描述:使用分隔符来连接给定数组x的元素,并用可选字符替换x中的null值。
select array_join(array[1,2,3,null,5,6],'|','0');-- 1|2|3|0|5|6
- array_max(x) → x
描述:返回数组x的最大值。
select array_max(array[2,54,67,132,45]); -- 132
- array_min(x) → x
描述:返回数组x的最小值。
select array_min(array[2,54,67,132,45]); -- 2
- array_position(x,element) → bigint
描述:返回数组x中element第一次出现的位置,没找到则返回0。
select array_position(array[2,3,4,5,1,2,3],3); -- 2
- array_remove(x, element) → array
描述:移除数组x中的值为element的元素并返回。
select array_remove(array[2,3,4,5,1,2,3],3); -- [2, 4, 5, 1, 2]
- array_sort(x) → array
排序并返回数组x。 x的元素必须是可排序的。 空元素将放置在返回数组的末尾。
select array_sort(array[2,3,4,5,1,2,3]); -- [1, 2, 2, 3, 3, 4, 5]
- array_sort(array(T), function(T, T, int))
描述:根据给定的比较器函数对数组进行排序并返回。比较器将使用两个可为空的参数,表示数组的两个可为空的元素。当第一个可为空的元素小于,等于或大于第二个可为空的元素时,它将返回-1、0或1。如果比较器函数返回其他值(包括NULL),则查询将失败并引发错误。
SELECT array_sort(ARRAY [3, 2, 5, 1, 2], (x, y) -> IF(x < y, 1, IF(x = y, 0, -1))); _col0 -------- [5, 3, 2, 2, 1] (1 row) SELECT array_sort(ARRAY ['bc', 'ab', 'dc'], (x, y) -> IF(x < y, 1, IF(x = y, 0, -1))); _col0 -------- [dc, bc, ab] (1 row) -- null值排在前,其余值按降序排列 SELECT array_sort(ARRAY [3, 2, null, 5, null, 1, 2], (x, y) -> CASE WHEN x IS NULL THEN -1 WHEN y IS NULL THEN 1 WHEN x < y THEN 1 WHEN x = y THEN 0 ELSE -1 END); _col0 -------- [null, null, 5, 3, 2, 2, 1] (1 row) -- null值在后的降序排列 SELECT array_sort(ARRAY [3, 2, null, 5, null, 1, 2], (x, y) -> CASE WHEN x IS NULL THEN 1 WHEN y IS NULL THEN -1 WHEN x < y THEN 1 WHEN x = y THEN 0 ELSE -1 END); _col0 -------- [5, 3, 2, 2, 1, null, null] (1 row) -- 按字符串长度排序 SELECT array_sort(ARRAY ['a', 'abcd', 'abc'], (x, y) -> IF(length(x) < length(y), -1, IF(length(x) = length(y), 0, 1))); _col0 -------- [a, abc, abcd] (1 row) -- 按数组长度排序 SELECT array_sort(ARRAY [ARRAY[2, 3, 1], ARRAY[4, 2, 1, 4], ARRAY[1, 2]], (x, y) -> IF(cardinality(x) < cardinality(y), -1, IF(cardinality(x) = cardinality(y), 0, 1))); _col0 -------- [[1, 2], [2, 3, 1], [4, 2, 1, 4]] (1 row)
- arrays_overlap(x, y)
描述:如果两个数组有共同的非null元素,则返回true。否则返回false。
select arrays_overlap(array[1,2,3],array[3,4,5]);-- true select arrays_overlap(array[1,2,3],array[4,5,6]);-- false
- cardinality(x)
描述:返回数组x的容量。
select cardinality(array[1,2,3,4,5,6]); --6
- concat(array1, array2, ..., arrayN)
描述:此函数提供与sql标准连接运算符(||)相同的功能。
- combinations(array(T), n) -> array(array(T))
描述:返回输入数组的n个元素子组。 如果输入数组没有重复项,则组合将返回n个元素的子集。
SELECT combinations(ARRAY['foo', 'bar', 'baz'], 2); -- [[foo, bar], [foo, baz], [bar, baz]] SELECT combinations(ARRAY[1, 2, 3], 2); -- [[1, 2], [1, 3], [2, 3]] SELECT combinations(ARRAY[1, 2, 2], 2); -- [[1, 2], [1, 2], [2, 2]]
子组以及子组中的元素,虽未指明,都是有序的。参数n必须不大于5,且产生的子组个数最大不超过100000。
- contains(x, element)
描述:如果数组x中包含element,则返回true。
select contains(array[1,2,3,34,4],4); -- true
- element_at(array(E), index)
描述:返回给定索引处数组的元素。 如果index> 0,则此函数提供与SQL标准下标运算符([])相同的功能,但在访问大于数组长度的索引时该函数返回NULL,且下标运算符在这种情况下将失败。 如果index <0,则element_at从最后到第一个访问元素。
select element_at(array['a','b','c','d','e'],3); -- c
- filter(array(T), function(T, boolean)) -> array(T)
描述:删选出按函数运算结果为true的元素构成的数组。
SELECT filter(ARRAY [], x -> true); -- [] SELECT filter(ARRAY [5, -6, NULL, 7], x -> x > 0); -- [5, 7] SELECT filter(ARRAY [5, NULL, 7, NULL], x -> x IS NOT NULL); -- [5, 7]
- flatten(x)
描述:以串联的方式将array(array(T)) 展开为array(T)。
- ngrams(array(T), n) -> array(array(T))
描述:返回数组的n元语法(相邻n个元素的子序列)。结果中n元语法的顺序未指定。
SELECT ngrams(ARRAY['foo', 'bar', 'baz', 'foo'], 2); -- [[foo, bar], [bar, baz], [baz, foo]] SELECT ngrams(ARRAY['foo', 'bar', 'baz', 'foo'], 3); -- [[foo, bar, baz], [bar, baz, foo]] SELECT ngrams(ARRAY['foo', 'bar', 'baz', 'foo'], 4); -- [[foo, bar, baz, foo]] SELECT ngrams(ARRAY['foo', 'bar', 'baz', 'foo'], 5); -- [[foo, bar, baz, foo]] SELECT ngrams(ARRAY[1, 2, 3, 4], 2); -- [[1, 2], [2, 3], [3, 4]]
- none_match(array(T), function(T, boolean))
描述:返回数组是否没有元素与给定谓词匹配。如果没有元素与谓词匹配,则返回true(特殊情况是当数组为空时)。如果一个或多个元素匹配,则为false;如果谓词函数对一个或多个元素返回NULL,而对所有其他元素返回false,则为NULL。
- reduce(array(T), initialState S, inputFunction(S, T, S), outputFunction(S, R))
返回从数组减少的单个值。将按顺序为数组中的每个元素调用inputFunction。除了获取元素之外,inputFunction还获取当前状态,最初为initialState,然后返回新状态。将调用outputFunction将最终状态转换为结果值。它可能是恒等函数(i-> i)。
SELECT reduce(ARRAY [], 0, (s, x) -> s + x, s -> s); -- 0 SELECT reduce(ARRAY [5, 20, 50], 0, (s, x) -> s + x, s -> s); -- 75 SELECT reduce(ARRAY [5, 20, NULL, 50], 0, (s, x) -> s + x, s -> s); -- NULL SELECT reduce(ARRAY [5, 20, NULL, 50], 0, (s, x) -> s + COALESCE(x, 0), s -> s); -- 75 SELECT reduce(ARRAY [5, 20, NULL, 50], 0, (s, x) -> IF(x IS NULL, s, s + x), s -> s); -- 75 SELECT reduce(ARRAY [2147483647, 1], CAST (0 AS BIGINT), (s, x) -> s + x, s -> s); -- 2147483648 SELECT reduce(ARRAY [5, 6, 10, 20], CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)),(s, x) -> CAST(ROW(x + s.sum, s.count + 1) AS ROW(sum DOUBLE, count INTEGER)), s -> IF(s.count = 0, NULL, s.sum / s.count)); -- 10.25
- repeat(element, count)
描述:将element重复输出count次,填充到数组中。
select repeat(4,5);-- [4, 4, 4, 4, 4]
- reverse(x)
描述:以相反顺序将数组元素填充到返回的新数组中。
select reverse(array[1,2,3,4,5]); --[5, 4, 3, 2, 1]
- sequence(start, stop)
描述:输出一个从start开始,到stop结束的数组。start不大于stop时,每次递增1,否则,每次递减1。
start和stop的数据类型还可以是date或者timstamp类型,按1天递增或递减。
select sequence(5,1); _col0 ----------------- [5, 4, 3, 2, 1] (1 row) select sequence(5,10); _col0 --------------------- [5, 6, 7, 8, 9, 10] (1 row)
- sequence(start, stop, step)→ array
描述:以步长step从start输出到stop。
select sequence(1,30,5);-- [1, 6, 11, 16, 21, 26]
- shuffle(x)→ array
描述:根据给的数组随机排列获得一个新的数组。
select shuffle(array[1,2,3,4,5]);-- [1, 5, 4, 2, 3] select shuffle(array[1,2,3,4,5]);-- [2, 1, 3, 5, 4]
- size(x) → bigint
描述:返回arrayx的容量。
select size(array[1,2,3,4,5,6]); --6
- slice(x, start, length) → array
描述:子集数组x从索引开头开始(如果start为负,则从结尾开始),长度为length。
select slice(array[1,2,3,4,5,6],2,3);-- [2, 3, 4]
- sort_array(x)
- trim_array(x, n) → array
描述:移除数组末尾n个元素。
SELECT trim_array(ARRAY[1, 2, 3, 4], 1); -- [1, 2, 3] SELECT trim_array(ARRAY[1, 2, 3, 4], 2); -- [1, 2]
- transform(array(T), function(T, U)) -> array(U)
描述:返回一个数组,该数组是将函数应用于数组的每个元素的结果。
SELECT transform(ARRAY [], x -> x + 1); -- [] SELECT transform(ARRAY [5, 6], x -> x + 1); -- [6, 7] SELECT transform(ARRAY [5, NULL, 6], x -> COALESCE(x, 0) + 1); -- [6, 1, 7] SELECT transform(ARRAY ['x', 'abc', 'z'], x -> x || '0'); -- [x0, abc0, z0] SELECT transform(ARRAY [ARRAY [1, NULL, 2], ARRAY[3, NULL]], a -> filter(a, x -> x IS NOT NULL)); -- [[1, 2], [3]]
- zip(array1, array2[, ...]) -> array(row)
描述:将给定数组按元素合并到单个行数组中。第N个自变量的第M个元素将是第M个输出元素的第N个字段。如果参数长度不均匀,则缺少的值将填充为NULL。
SELECT zip(ARRAY[1, 2], ARRAY['1b', null, '3b']); -- [{1, 1b}, {2, NULL}, {NULL, 3b}]
- zip_with(array(T), array(U), function(T, U, R)) -> array(R)
描述:使用函数将两个给定的数组逐个元素合并到单个数组中。如果一个数组较短,则在应用函数之前,将在末尾添加空值以匹配较长数组的长度。
SELECT zip_with(ARRAY[1, 3, 5], ARRAY['a', 'b', 'c'], (x, y) -> (y, x)); -- [{a, 1}, {b, 3}, {c, 5}] SELECT zip_with(ARRAY[1, 2], ARRAY[3, 4], (x, y) -> x + y); -- [4, 6] SELECT zip_with(ARRAY['a', 'b', 'c'], ARRAY['d', 'e', 'f'], (x, y) -> concat(x, y)); -- [ad, be, cf] SELECT zip_with(ARRAY['a'], ARRAY['d', null, 'f'], (x, y) -> coalesce(x, y)); -- [a, null, f]