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/<<parquet_filename>>.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 Analytics 将数据帧写入 SQL 专用数据库
如何通过 Synapse 的 Spark 池将数据帧数据附加到专用的 SQL 池中?