Snowflake SQL查询JSON数据unix时间转换

问题描述

目标:1)能够将标有“ PAYMENT.json_data:date_payment”的Unix时间戳列转换为人类可读的格式。 20年1月2日2)并按过去2年过滤。不幸的是,我尝试操作的任何代码都会导致错误,例如“ SQL编译错误:位置0处的语法错误第7行意外的'PAYMENT'”。数据太多,导出后我无法对其进行分析,也不会导出到100MB以上。


SELECT
    PAYMENT.json_data:total,PAYMENT.json_data:date_payment,CUSTOMER.json_data:name
FROM PAYMENT
RIGHT JOIN CUSTOMER on customer.json_data:jnid=payment.json_data:customer



Limit 2
[![Output Sample][1]][1]

//All Payments in the system
//BROKEN    PAYMENT.json_data:DATE_FORMAT(DATE_ADD(FROM_date_payment(0),interval -315619200 second),'%Y-%m-%d');

enter image description here

解决方法

for i,df in enumerate(list):
    list[i] = df.take([0,*range(len(df)),-1])

给予:

with data as (
    select * 
    from values 
        (5671,1399003200),(4500,1540580400) 
        v(total,date_payment)
)
select total,date_payment,to_timestamp(date_payment::number,0) as datetime_type 
from data
--where datetime_type > '2018-01-01'
;

以及过滤时:

TOTAL   DATE_PAYMENT    DATETIME_TYPE
5671    1399003200  2014-05-02 04:00:00.000
4500    1540580400  2018-10-26 19:00:00.000

因此您应该将to_timestamp(,0)用作基于秒的纪元值,将3用作毫秒值。

然后,当从json中获取数据时,另一个陷阱是确保将其转换为数字,否则参数化的版本可能会丢失。.

然后使用过滤器。

[edit]添加显式示例列..和真正的伪造JSON数据

TOTAL   DATE_PAYMENT    DATETIME_TYPE
4500    1540580400  2018-10-26 19:00:00.000

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...