我正在尝试提出一个 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;
这将创建一个下划线(“_”)的空文件,而不是一个空的镶木地板文件。有什么想法如何做到这一点吗?
在无服务器 SQL 池中,您可以对 Parquet、Delta Lake 和分隔文本格式的 Azure Data Lake 数据进行查询。
正如您所提到的,您需要创建一个空的 Parquet 文件而不是空文件,这样下游进程就不会中断。
以下步骤将帮助您在 ADLS 中创建 Parquet 文件:
存储帐户中拥有 Parquet 文件后,您可以在 Synapse 无服务器池中创建外部表。
右键单击该文件。
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
结果: