如何创建类似于 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

Hive学习 第四课 创建表并load 数据到表

如何在 Synapse (Azure SQL DW) 上检索视图定义?

如何从 Synapse 管道触发 ADF 管道

如何写入 Synapse 专用 sql 池