Sql 从apache drill中的日期开始获取一年中的一周

Sql 从apache drill中的日期开始获取一年中的一周,sql,apache,datetime,apache-drill,Sql,Apache,Datetime,Apache Drill,我正在尝试将一些数据中的时间戳(使用ApacheDrill)转换为一年中的一周 根据壁橱的东西,我可以看到的是“提取”功能,但这只适用于年、月、日、时、分、秒单位 原始日期示例 ID, START_DATE 1, 2014-07-07T13:20:34.000Z 查询(类似于此) 得到如下结果: ID, START_DATE 1, 27 目前,支持以下时间单位:年、月、日、小时、分钟、秒 例如: SELECT ID,EXTRACT(YEAR FROM START_DATE) from d

我正在尝试将一些数据中的时间戳(使用ApacheDrill)转换为一年中的一周

根据壁橱的东西,我可以看到的是“提取”功能,但这只适用于年、月、日、时、分、秒单位

原始日期示例

ID, START_DATE
1, 2014-07-07T13:20:34.000Z 
查询(类似于此)

得到如下结果:

ID, START_DATE
1, 27 
目前,支持以下时间单位:年、月、日、小时、分钟、秒

例如:

SELECT ID,EXTRACT(YEAR FROM START_DATE) from dfs.`/home/dev/Desktop/date.csv`;

您可以创建自己的函数,以获得一年中的每周。检查开发自定义函数。

几周后,我又遇到了这个问题,我没有在drill中编写函数(因为我觉得这太多了,我只需要粗略估计一周),而是执行了以下操作:

# 7 * 24 * 60 * 60 = 604800

select
  START_DATE as `ORIGINAL DATE`,
  TRUNC(CAST((CAST((UNIX_TIMESTAMP(START_DATE,'yyyy-MM-dd HH:mm:ss.SSS') - UNIX_TIMESTAMP(EXTRACT(year FROM TO_DATE(START_DATE, 'yyyy-MM-dd HH:mm:ss.SSS')),'yyyy')) AS FLOAT) / CAST(604800 AS FLOAT)) AS FLOAT)) + 1 as `WEEK_NO`,
  EXTRACT(year FROM TO_DATE(START_DATE, 'yyyy-MM-dd HH:mm:ss.SSS')) as `YEAR`
from
  GAME_DATA
order by
  START_DATE
limit 10;  
# 7 * 24 * 60 * 60 = 604800

select
  START_DATE as `ORIGINAL DATE`,
  TRUNC(CAST((CAST((UNIX_TIMESTAMP(START_DATE,'yyyy-MM-dd HH:mm:ss.SSS') - UNIX_TIMESTAMP(EXTRACT(year FROM TO_DATE(START_DATE, 'yyyy-MM-dd HH:mm:ss.SSS')),'yyyy')) AS FLOAT) / CAST(604800 AS FLOAT)) AS FLOAT)) + 1 as `WEEK_NO`,
  EXTRACT(year FROM TO_DATE(START_DATE, 'yyyy-MM-dd HH:mm:ss.SSS')) as `YEAR`
from
  GAME_DATA
order by
  START_DATE
limit 10;