Azure Synapse Polybase/外部表-仅返回最新文件

xyhw6mcr  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(160)

我们有一个文件在datalake中分区,并使用Azure Synapse SQL Serverless池在Power BI中可视化之前使用外部表查询它们。
文件以以下分区格式存储:{source}/{year}/{month}/{filename}_{date}.parquet
然后,我们有一个外部表,用于加载该源的所有文件。
对于每天递增的所有文件,这非常有效,因为我们希望包括所有文件。但是,我们有一些集成,我们希望只返回最新的文件。(即,发送给我们的最新文件是我们希望加载到Power BI中的当前状态)。
是否可以在外部表语句中只返回最新的文件?或者我们需要增加额外的逻辑?我们可以加载中的所有文件,然后筛选最新的文件名并将其保存到新的位置。或者,我们可以尝试创建一个每天都会更改的外部表。
有没有更好的方法来解决这个问题?

fsi0uk1n

fsi0uk1n1#

如果您使用的是专用池,那么我会使用最新文件文件夹更改表的位置。
每天加载到一个新文件夹中,然后更改外部表的LOCATION以查看当前/最近一天,但您可能需要添加额外的逻辑来跟踪控制表中的最新成功加载日期。
不幸的是,我自己还没有找到更好的方法来做到这一点。

lfapxunr

lfapxunr2#

您可以使用文件元数据来查询最新的文件,但需要确保Parquet地板文件以日期戳开始:

CREATE VIEW v_latest_user AS (
   SELECT
       *
       , t1.filename() AS [FILE_NAME]
   FROM OPENROWSET (
       BULK 'RAW/my_data/users/year=*/month=*/*.parquet',
       DATA_SOURCE = 'myDataLake',
       FORMAT = 'PARQUET'
   ) WITH (
        Serial bigint
        -- , MyColumn varchar(8), ...
   ) t1
    WHERE
        t1.filename() IN (
            SELECT TOP 1
                t2.filename()
            FROM OPENROWSET  (
                BULK 'RAW/my_data/users/year=*/month=*/*.parquet',
                DATA_SOURCE = 'myDataLake',
                FORMAT = 'PARQUET'
            ) t2
            ORDER BY
                t2.filename() DESC
        )
)

查看https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/query-specific-files,了解有关在SQL Serverless查询中使用文件元数据的更多信息。

相关问题