Synapse 专用池与分区 PARQUET

Posted

技术标签:

【中文标题】Synapse 专用池与分区 PARQUET【英文标题】:Synapse Dedicated Pool vs Partitioned PARQUET 【发布时间】:2021-12-27 16:14:30 【问题描述】:

我无法使用 CREATE EXTERNAL TABLE 从分区列中获取数据。

在无服务器上,我可以使用“filepath()”函数,但在专用池上没有找到任何等效函数。列为 NULL。

CREATE EXTERNAL TABLE myTable
    (   col01   int
       ,col02   Date
       ,col03   varchar(8000)
       ,col04   int
       ,col05   float
       ,col06   float
       ,col07   bigint
       ,col08   datetime2
       ,col09   varchar(8000)
      )  
    WITH (
        LOCATION = '<<datalakepath>>/parquet_dir/',  
        DATA_SOURCE = SilverAzureDataLakeStore,  
        FILE_FORMAT = Parquet
    )

来源路径: A/B/TransactionsHistoryV1/LAST7Days/col01=5241/col02=2021-11-09/&lt;&lt;parquet_filename&gt;&gt;.snappy.parquet

我也尝试过,但也没有成功:

CREATE EXTERNAL TABLE myTable
    (   col03   varchar(8000)
       ,col04   int
       ,col05   float
       ,col06   float
       ,col07   bigint
       ,col08   datetime2
       ,col09   varchar(8000)
       ,col01   int
       ,col02   Date
      )  
    WITH (
        LOCATION = '<<datalakepath>>/parquet_dir/*/*',  
        DATA_SOURCE = SilverAzureDataLakeStore,  
        FILE_FORMAT = Parquet
    )

有什么建议吗?

我也尝试使用 Delta,但看起来 专用池仍然不支持 Apache Delta

【问题讨论】:

【参考方案1】:

目前,Azure Synapse Analytics 中的 Spark 池和无服务器 SQL 池都支持 Delta Lake 格式。无服务器 SQL 池不支持更新 Delta Lake 文件。只有 Parquet 格式的表才能从 Spark 池共享到无服务器 SQL 池。

这是使用 Delta Lake 分区视图时的例外行为。

注意:很遗憾,filepath 函数不能与 format=delta 一起使用。

如果您在 Delta Lake 存储之上创建分区视图,您可以只指定一个根 Delta Lake 文件夹,而无需使用 FILEPATH 函数显式公开分区列:

CREATE OR ALTER VIEW YellowTaxiView
AS SELECT *
FROM  
    OPENROWSET(
        BULK 'yellow',
        DATA_SOURCE = 'DeltaLakeStorage',
        FORMAT='DELTA'
    ) nyc

您可以将 FILEPATH 函数用于分区视图。

如果您有一组在分层文件夹结构中分区的文件,您可以使用文件路径中的通配符来描述分区模式。使用 FILEPATH 函数将部分文件夹路径公开为分区列。

CREATE VIEW TaxiView
AS SELECT *, nyc.filepath(1) AS [year], nyc.filepath(2) AS [month]
FROM
    OPENROWSET(
        BULK 'parquet/taxi/year=*/month=*/*.parquet',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT='PARQUET'
    ) AS nyc

更多详情,请参考Create and use views using serverless SQL pool in Azure Synapse Analytics。

【讨论】:

以上是关于Synapse 专用池与分区 PARQUET的主要内容,如果未能解决你的问题,请参考以下文章

如何写入 Synapse 专用 sql 池

用于 Synapse 专用池的 OPENROWSET()?

使用 Synapse Analytics 将数据帧写入 SQL 专用数据库

如何通过 Synapse 的 Spark 池将数据帧数据附加到专用的 SQL 池中?

Azure Synapse Analytics 专用 SQL 池 - IIF 语句不起作用

文档中显示的 sql 代码未在 azure synapse 专用 sql 池上运行