具有分区文件夹的 Datalake 中的 Databricks 增量表

Databricks Delta Table from Datalake with Partitioned Folders

提问人:LordRofticus 提问时间:11/16/2023 最后编辑:Alex OttLordRofticus 更新时间:11/16/2023 访问量:34

问:

我在名为“暂存”的容器中有有关 Azure 存储帐户的数据。

使用 SourceSystem/Dataset 层次结构,我每月还有基于日期的文件夹。enter image description here在文件夹内,数据以增量格式存储。enter image description here

在数据块中,我已经装载了容器。 我想创建一个增量表,这样我就可以看到基础文件夹printtransaction文件夹中的所有数据。

DROP TABLE IF EXISTS staging.default.ysoft_printtransaction;

CREATE TABLE staging.default.ysoft_printtransaction
USING delta
OPTIONS ('delta.checkpoint.writeStatsAsJson' 'false', 'delta.checkpoint.writeStatsAsStruct' 'true')
LOCATION 'abfss://[email protected]/ysoft/printtransaction/*/';

SELECT * FROM staging.default.ysoft_printtransaction;

但是,这不起作用,因为我在从表格中读取时遇到了问题:enter image description here

显然,我不想为每个分区文件夹创建一个表。

我有哪些选择?

Databricks Azure-Databricks Delta-Lake Azure-Data-Lake-Gen2

评论

0赞 Alex Ott 11/16/2023
每个文件夹都已是一个 Delta Lake 表。你想把它们组合在一起吗?谁写了那张表?这真的不是一个最好的设计
0赞 LordRofticus 11/17/2023
我意识到他们是。我宁愿在 SourceSystem\Dataset 下没有基础增量。每个数据集都有一个名为 _partition 的专用列,我可以用它来创建具有分区引用的单个增量表。
0赞 Alex Ott 11/17/2023
是的,分别读取每个表,并将其作为单个表输出到其他地方

答:

0赞 Pratik Lad 11/22/2023 #1

根据您提供的信息,这两个文件夹是单独的增量表。我同意 @Alex Ott 所说,因为这两个文件夹是单独的增量表,您需要单独读取它们,然后您可以合并它们并使用不同表中的合并查询进行组合。

它将无法从单个表中的多个增量表中读取数据。

enter image description here

分别读取每个文件夹的示例代码:

CREATE  TABLE  ysoft_printtransaction1
USING delta
Location  'abfss://[email protected]/sampledb/202113';

CREATE  TABLE  ysoft_printtransaction2
USING delta
Location  'abfss://[email protected]/sampledb/202110';

要合并表,您可以使用以下命令。

MERGE  INTO  target  USING  source
  ON  target.key  =  source.key
  WHEN  NOT  MATCHED  THEN  INSERT  *