注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
有关表达式面板的介绍,请参阅使用表达式面板的指南。本文档是使用Contour丰富表达式语言的资源,可用作类型、操作和函数的参考。
您可以在表达式中使用以下数据类型:
字符串用单引号表示:
'This is a string'
这是一个字符串
通过添加第二个单引号来转义字符串中的单引号:
'I''m a string'
我是一个字符串
使用||
运算符将列连接为字符串:
"Gender" || "MaritalStatus"
您还可以将列与常量连接。
'$' || ("salaryColumn"/1000.0) || 'k'
整数是非浮点数:
5
双精度是浮点数:
5.7
布尔变量可以是true
或false
。布尔变量不区分大小写。
您可以将格式为YYYY-MM或YYYY-MM-DD的字符串转换为日期:
CAST('2016-12-06' AS DATE)
您也可以将字符串转换为时间戳:
CAST('2016-12-06` `01:12:34' AS TIMESTAMP)
在对时间戳进行操作时,最好先将时间戳转换为长整型,或在需要毫秒精度时转换为双精度。这将为您提供UNIX时间中的秒数。
例如,假设您有两个时间戳列:“start”和“end”。要确定两个时间之间的分钟数,您可以使用以下表达式:
(CAST("end" as LONG) - CAST("start" as LONG)) / 60
.
将长整型转换为时间戳假设长整型值以秒为单位。如果您的数据以毫秒为单位,请在转换之前除以1000。
以下部分概述了您可以在表达式中使用的操作及其优先级:
通过其他数值列或常量对数值列(整数或双精度)进行加、减、乘和除操作:+
, -
, *
, /
"tipAmount" / "fare"
"diameter" * 3.14
使用>
(大于)、>=
(大于或等于)、<
(小于)、<=
(小于或等于)将任意类型的列与其他列或常量进行比较。结果为一列布尔值。
"age" > "averageAge"
"totalDistance" < 5
检查某行在两个列中是否具有相同值,使用==
,或不同值,使用!=
。
"cityOfBirth" == "cityOfResidence"
您还可以将列值与常量进行比较。
"Gender" == 'M'
在比较两个字符串时,使用字典序排序。注意,这在比较包含数字的字符串时可能会产生反直觉的结果。例如:
'Alligator' < 'Boat'
=> TRUE,因为'A'的编码小于'B''Alliance' < 'Alligator'
=> TRUE,因为'a'小于'g''Zoo' < 'alpha'
=> TRUE,因为'Z'小于'a''Zoo' < 'Zoologist'
=> TRUE,因为如果一个字符串是另一个字符串的前缀,则较短的字符串被认为较小'1' < '2'
=> TRUE,因为字符串字符'1'小于字符串字符'2''10' < '2'
=> TRUE,因为其第一个字符串字符'1'小于字符串字符'2';注意这是对字符串'10'和'2'的比较,而不是整数10和2'10' < '20'
=> TRUE,因为'1'小于'2'在Contour表达式语言中,与NULL
的相等比较具有以下行为。
NULL = 'DATA'
=> FALSENULL != 'DATA'
=> TRUENULL = NULL
=> TRUENULL != NULL
=> FALSE然而,在Spark SQL中,所有这些表达式返回NULL
。在Contour表达式和Spark SQL之间进行转换时,考虑这种行为差异以产生一致的结果是很重要的。
通过对一个或多个列进行布尔逻辑运算来派生新的布尔列。
"Age" >=70 AND "Gender" = 'M'
类型转换允许您更改列或表达式的类型。您可以转换为布尔值、整数、双精度、日期和时间戳。
CAST("startDate" AS DATE)
CAST("startTime" AS TIMESTAMP)
CAST("numParticipants" AS INTEGER)
Case语句允许您在一个表达式中评估多种可能性。每个语句按顺序进行评估,并执行第一个评估为true的THEN
语句。
Copied!1 2 3 4 5
CASE WHEN "age" < 13 THEN 'Child' -- 如果年龄小于13岁,则为儿童 WHEN "age" > 19 THEN 'Adult' -- 如果年龄大于19岁,则为成人 ELSE 'Teenager' -- 否则为青少年 END
Copied!1 2 3 4 5
CASE MaritalStatus WHEN 'S' THEN 'Single' -- 如果婚姻状态是 'S',则返回 'Single'(单身) WHEN 'M' THEN 'Married' -- 如果婚姻状态是 'M',则返回 'Married'(已婚) ELSE 'Unknown' -- 如果婚姻状态是其他值,则返回 'Unknown'(未知) END
在列中搜索指定模式。请参阅有关 SQL LIKE ↗ 的文档以了解更多信息。
检查值是否 IS NULL
或 IS NOT NULL
。返回布尔值。
表达式中操作的优先级按以下列表详细说明,从最高优先级到最低优先级。位于同一行的操作具有相同的优先级。
以下是列表达式中可用函数的完整列表。
有关派生相对日期的更多信息和示例,请参阅 派生相对日期的参考文档。
有关数组函数的更多信息和示例,请参阅 数组函数的参考文档。
null
时返回-1。当在窗口函数中使用 ROW_NUMBER
、FIRST
、LAST
、ARRAY_AGG
或 ARRAY_AGG_DISTINCT
时,要注意非确定性。想象一下我们按列A分区并按列B排序。如果对于列A的相同值,列B有多个相同值的行,那么这些窗口函数的结果可能是不确定的——它们可能会在给定相同输入数据和逻辑时产生不同的结果。
窗口函数需要一个OVER子句;有关更多信息和示例,请参阅 窗口函数的参考文档。
聚合函数可以在聚合表达式和窗口函数中使用。
$.field
$['field']