Azure Synapse 中的外部 table 列不允许 NOT NULL

NOT NULL is not allowed for external table columns in Azure Synapase

我正在 Azure Synapse 中创建外部 table。我的数据采用镶木地板格式,位于数据湖中。

正在创建一个名为“test”的 table

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 = 'sandboxs2345_dfs_core_windows_net') 
    CREATE EXTERNAL DATA SOURCE [sandboxs2345_dfs_core_windows_net] 
    WITH (
        LOCATION = 'abfss://jobsnumber@sandboxs2345.dfs.core.windows.net' 
    )
GO

CREATE EXTERNAL TABLE [test] (
    [Name] nvarchar(4000),
    [JobNo] nvarchar(4000) PRIMARY KEY
    )
    WITH (
    LOCATION = 'New/update.parquet',
    DATA_SOURCE = [sandboxs2345_dfs_core_windows_net],
    FILE_FORMAT = [SynapseParquetFormat]
    )
GO


SELECT TOP 100 * FROM [dbo].[test]
GO

我有两列名称和职位编号。我想让 JobNo 成为主键。当我尝试 运行 上述查询

时出现以下错误

NOT NULL is not allowed for external table columns.

谁能告诉我问题出在哪里?

在 Azure Synapse 中,用于创建主键我们应该将其称为 NONCLUSTEREDNOT ENFORCED

要了解有关 Table Synapse 约束的更多信息,请参阅:

https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-table-constraints

请按照此 link 创建外部文件的步骤 Table 在 Synapse 中。

https://dwgeek.com/create-external-tables-in-azure-synapse-analytics.html/

按照上面link的步骤,我们可以这样创建主键。

create EXTERNAL TABLE external_table_name
(
[column1]   varchar(100) primary key NONCLUSTERED NOT ENFORCED,
[column2]  integer,
[column3]  integer,
[column4]  integer
)  
WITH (
LOCATION='/Datasets/data.csv',
DATA_SOURCE = external_source_name,  
FILE_FORMAT = external_file_format_name
);

以防万一,如果上面的方法不起作用,我建议你通过这个:

https://docs.microsoft.com/en-us/answers/questions/819253/not-null-is-not-allowed-for-external-table-columns.html