Dan*_*ott 2 sql partitioning databricks delta-lake
我正在 Databricks 中创建一个增量表,其中包含 1 天的代理日志(数百行数百万行)。我希望能够按小时对表进行分区,因此简单地按“_time”列对表进行分区是不够的。另外,我正在使用%sql运行时在笔记本中创建表,但如果这是更好的选择,我愿意在 Scala 中创建它。
如何创建分区逻辑,以便为每个小时的日志创建一个新分区?
我的专栏的格式_time如下。
yyyy-mm-ddThh:mm:ss.xxxxxx-time:zone其中时间和区域是 2 位数字。
因此,我想对每个独特的小时进行分区,一天有 24 个分区,就像这样。
yyyy-mm-ddThh
您需要创建单独的列来对数据集进行分区。在 SQL 语法中,您可以使用date和hour来获取您感兴趣的值,然后在查询中使用它,例如
CREATE TABLE events
USING delta
PARTITIONED BY(date, hour)
AS SELECT *, date(_time) as date, hour(_time) as hour from myData
Run Code Online (Sandbox Code Playgroud)
这将导致您的 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/
(...)
Run Code Online (Sandbox Code Playgroud)
请记住,这会将这两列添加到您的增量数据中,但我想不出一种方法来按不属于表的一部分进行分区(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|
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11307 次 |
| 最近记录: |