我想创建一个带有基于年月日分区列的外部表。我希望能够以优化的方式查询这些数据。查询可能涉及使用一系列天、月或年。因此,我希望能够在查询中使用“BETWEEN”。这将帮助我避免扫描整个数据湖并减少成本和时间。
我在使用 Athena 的 AWS 中使用了类似的结构;但是,我在 Azure Synapse Analytics 中创建带有分区的表时遇到很多麻烦。如果您能指导我解决这个问题,我将非常感激。
示例查询如下:
SELECT * FROM my_partitioned_table
WHERE year BETWEEN 2023 AND 2024
AND month BETWEEN 1 AND 2
AND day BETWEEN 5 AND 6
创建外部表的查询:
CREATE EXTERNAL TABLE [dbo].[my_partitioned_table]
(
[UTCDate] DATE,
[UTCHour] INT,
[LocalDate] DATE,
[LocalHour] INT,
[value] FLOAT
)
WITH (
LOCATION = '/path/year=*/month=*/day=*/*.parquet',
DATA_SOURCE = [datasource],
FILE_FORMAT = [fileformat]
)
PARTITION BY ( [year] INT, [month] INT, [day] INT );
上面的查询是错误的,我不明白如何添加分区。我还确保我的文件以 /path/year=/month=/day=/.parquet 格式存储。
您无法在 Synapse Serverless 中创建分区外部表,必须在 Spark 中创建分区表。但是,您可以在视图中创建分区视图。
注意:如果您在专用 SQL 中执行创建表的查询,“分区依据”应引用该列,您尚未定义 [年]、[月] 或 [日] 等。它应该从以下位置获取年份列值,例如 YEAR([UTCDate])。