您需要创建单独的列来对数据集进行分区。在 SQL 语法中,您可以使用date
并hour
获取您感兴趣的值,然后在查询中使用它,例如
CREATE TABLE events
USING delta
PARTITIONED BY(date, hour)
AS SELECT *, date(_time) as date, hour(_time) as hour from myData
这将导致您的 delta Lake 按日期和小时进行分区,物理上在磁盘上大致如下所示:
delta/events/date=2019-01-01/
|-delta/events/date=2019-01-01/hour=0/
|-delta/events/date=2019-01-01/hour=1/
(...)
delta/events/date=2019-01-02/
(...)
请记住,这会将这两列添加到您的增量数据中,但我想不出一种方法来按不属于表的部分进行分区(PARTITION BY hour(x)
不起作用)。
+---+-------------------+----------+----+
| id| _time| date|hour|
+---+-------------------+----------+----+
| 71|2019-01-16 12:31:00|2019-01-16| 12|
|108|2019-01-16 12:31:00|2019-01-16| 12|