如何创建类似于 hive 的 Synapse 无服务器池分区表
Posted
技术标签:
【中文标题】如何创建类似于 hive 的 Synapse 无服务器池分区表【英文标题】:how to create Synapse serverless pool partition table similar to hive 【发布时间】:2021-10-19 16:16:38 【问题描述】:在 hive 中我们可以创建 hive 分区表
CREATE EXTERNAL TABLE testdb.test_table(name string, age int)
PARTITIONED BY (dept string)
ROW FORMAT DELIMITED
STORED AS TEXTFILE
LOCATION '/path/to/dataFile/';
对于分布在以下位置的文件:
/path/to/dataFile/dept1
/path/to/dataFile/dept2
/path/to/dataFile/dept3
然后我们可以像这样更新分区
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept1') LOCATION '/path/to/dataFile/dept1';
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept2') LOCATION '/path/to/dataFile/dept2';
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept3') LOCATION '/path/to/dataFile/dept3';
在 Azure 中,我们的文件分布在不同文件夹的容器中。我需要在突触无服务器池中创建一个分区外部表。我遵循的语法是
CREATE EXTERNAL TABLE [testdb].[test1]
(
[STUDYID] varchar(2000) ,[SITEID] varchar(2000) )
WITH
(
LOCATION = '/<abc_location>/csv/archive/',
DATA_SOURCE = [datalake],
FILE_FORMAT = [csv_comma_values]
)
我正在检查 azure 文档,但没有找到任何相关文档。有什么方法可以实现类似于 hive 代码的东西。
【问题讨论】:
【参考方案1】:分区外部表当前在 Azure Synapse 中不可用。
Location 从根文件夹开始,通过指定/**
,您可以返回子文件夹中的文件。外部表将跳过以下划线_
和句点.
开头的文件
CREATE EXTERNAL TABLE sample_table
(
firstname varchar(50),
lastname varchar(50)
)
WITH (
LOCATION = '/csv/**',
DATA_SOURCE = blob_storage,
FILE_FORMAT = csv_file_format
)
【讨论】:
以上是关于如何创建类似于 hive 的 Synapse 无服务器池分区表的主要内容,如果未能解决你的问题,请参考以下文章
Azure Synapse SQL DW 部署是不是类似于 SQL DB 部署?
Databricks + ADF + ADLS2 + Hive = Azure Synapse