v2.x 注意事项
v2.x 使用 Apache Calcite 连接数据源,编写 SQL 获取数据时,需要遵循 Calcite 语法;
以下是已知的语法调整,将持续更新。
IF 关键字
标准 SQL中使用了 IF 关键字:
SELECT
create_time,
IF ( pay_method = '支付宝', '线上支付', '线下支付' ) 渠道,
pay_method
FROM
transactions
ORDER BY
create_time DESC
LIMIT 3
---
create_time 渠道 pay_method
2024-06-02 11:11:11 线上支付 支付宝
2024-05-02 11:11:11 线下支付 云闪付
2024-04-02 11:11:11 线下支付 微信
Calcite 不支持此关键字,v2.x 调整写法,使用 CASE WHEN 来代替:
SELECT
create_time,
CASE pay_method WHEN '支付宝' THEN '线上支付' ELSE '线下支付' END 渠道,
pay_method
FROM
transactions
ORDER BY
create_time DESC
LIMIT 3
---
create_time 渠道 pay_method
2024-06-02 11:11:11 线上支付 支付宝
2024-05-02 11:11:11 线下支付 云闪付
2024-04-02 11:11:11 线下支付 微信
13位时间戳转换
标准 SQL 直接使用 from_unixtime
SELECT
create_time,
from_unixtime( create_time / 1000 ) AS formatted_date
FROM
dataset_table
---
create_time formatted_date
1709116580965 2024-02-28 10:36:20.9650
1664443534295 2022-09-29 09:25:34.2950
1664441241002 2022-09-29 08:47:21.0020
v2.x 调整写法,from_unixtime(CAST(`last_update_time` AS BIGINT), 'yyyy-MM-dd HH:mm:ss')
SELECT
create_time,
from_unixtime( CAST( `create_time` AS BIGINT ), 'yyyy-MM-dd HH:mm:ss' ) AS formatted_date
FROM
dataset_table
---
create_time formatted_date
1709116580965 2024-02-28 10:36:20
1664443534295 2022-09-29 09:25:34
1664441241002 2022-09-29 08:47:21
DATEDIFF 函数
标准 SQL 支持 datediff 函数,如下:
select
datediff(endtime,begintime) as diffday
from yanz
---
begintime endtime diffday
2024-02-27 10:55:26 2024-02-29 10:55:32 2
2024-02-01 10:55:43 2024-02-23 10:55:47 22
v2.x Calcite 不支持 datediff 函数,调整写法:
select
begintime,
endtime,
FLOOR((UNIX_TIMESTAMP(`endtime`) - UNIX_TIMESTAMP(`begintime`)) / (1000*24 * 60 * 60)) AS `diffday`
from yanz
---
begintime endtime diffday
2024-02-27 10:55:26 2024-02-29 10:55:32 2
2024-02-01 10:55:43 2024-02-23 10:55:47 22
DATE_FORMAT 函数
标准 SQL 支持 data_format 函数,如下:
SELECT
create_time,
date_format( create_time, '%Y-%m' ) as yearm
FROM
transactions
LIMIT 2
---
create_time yearm
2023-04-19 16:17:00 2023-04
2023-04-19 17:17:00 2023-04
Calcite 不支持 date_format 函数,v2.x 版本增加需要在数据集中新建计算字段,示例如下:
DE_DATE_FORMAT(CURRENT_DATE,'yyyy-MM')
SUBSTR 函数
标准 SQL 支持 substr 函数,如下:
SELECT
city,
substr( city, 1, 2 ) AS cit
FROM
transactions
LIMIT 3;
---
city cit
潍坊市 潍坊
淄博市 淄博
日照市 日照
v2.x 版本的 Calcite 不支持 substr
函数,可以使用标准 SQL 中的 SUBSTRING
函数,因为很多 SQL 方言都支持这个标准 SQL 函数:
SELECT
province,
city,
SUBSTRING( city FROM 1 FOR 2 ) AS cit
FROM
transactions
LIMIT 3;
---
city cit
潍坊市 潍坊
淄博市 淄博
日照市 日照