T-SQL 查询,用于在无服务器突触中创建仅包含标头的空 parquet 文件

问题描述 投票:0回答:1

我正在尝试提出一个 T-SQL 查询来在无服务器突触中生成一个空的镶木地板文件(仅包含标题信息)。

当前,如果输入文件在镶木地板文件中包含数据(例如 inputFile1),并且在使用它执行 T-SQL 查询并且查询不返回任何值时,则会创建一个空的下划线文件(0 字节)。

我需要一个空的 parquet 文件,而不是 0kb 的空文件,这样下游进程就不会中断。无法生成空镶木地板文件。 还尝试代替空镶木地板文件,或生成带有某些标头的文件。 这样下游流程就不会中断(特定于某些需要处理的场景)

为此,我尝试了一些 T-SQL 查询,例如:

IF EXISTS(SELECT * FROM SCHEMA.TABLES WHERE TABLE_NAME = 'MyTableName' AND TABLE_SCHEMA = 'dbo') 删除外部表 [dbo].[MyTableName]; DECLARE @row_count INT CREATE EXTERNAL TABLE [dbo].[MyTableName] WITH ( LOCATION = 'InputLocation', DATA_SOURCE = Some_Source, FILE_FORMAT = [ParquetFormat] ) AS SELECT TOP 0 CAST(NULL AS NVARCHAR(50)) AS Id;选择@row_count = @@ROWCOUNT;选择@row_count;

这将创建一个下划线(“_”)的空文件,而不是一个空的镶木地板文件。有什么想法如何做到这一点吗?

c# .net t-sql serverless azure-synapse
1个回答
0
投票

在无服务器 SQL 池中,您可以对 Parquet、Delta Lake 和分隔文本格式的 Azure Data Lake 数据进行查询。

正如您所提到的,您需要创建一个空的 Parquet 文件而不是空文件,这样下游进程就不会中断。

以下步骤将帮助您在 ADLS 中创建 Parquet 文件:

  1. 使用复制活动创建数据工厂管道。
  2. 将复制活动接收器设置为 Parquet 格式的 ADLS2 文件夹。

存储帐户中拥有 Parquet 文件后,您可以在 Synapse 无服务器池中创建外部表。

enter image description here 右键单击该文件。 enter image description here

IF NOT EXISTS (SELECT * FROM sys.external_file_formats WHERE name = 'SynapseParquetFormat') 
    CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat] 
    WITH ( FORMAT_TYPE = PARQUET)
GO

IF NOT EXISTS (SELECT * FROM sys.external_data_sources WHERE name = 'folder02_synpstgacc_dfs_core_windows_net') 
    CREATE EXTERNAL DATA SOURCE [folder02_synpstgacc_dfs_core_windows_net] 
    WITH (
        LOCATION = 'abfss://[email protected]' 
    )
GO

CREATE EXTERNAL TABLE dbo.tbl_empty (
    [column1] nvarchar(4000),
    [column2] nvarchar(4000)
    )
    WITH (
    LOCATION = 'empty_parquet_file/part-00000-tid-8452994219104257737-54fcfcb5-23d3-4c7d-acc7-d445fbb41294-0-1.c000.snappy.parquet',
    DATA_SOURCE = [folder02_synpstgacc_dfs_core_windows_net],
    FILE_FORMAT = [SynapseParquetFormat]
    )
GO

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.