我想在 azure data warehouse中的表中添加一个检查约束。
我有以下脚本:
alter table [FactTbl_Test] add constraint Ck_Test_id check ([Test_Id] != 'Unknown')
这会导致以下错误:
第 2 行第 74 列的解析错误:“检查”附近的语法不正确。
编辑:
如果在表声明中创建约束,也会出现同样的错误。
我想在 azure data warehouse中的表中添加一个检查约束。
我有以下脚本:
alter table [FactTbl_Test] add constraint Ck_Test_id check ([Test_Id] != 'Unknown')
这会导致以下错误:
第 2 行第 74 列的解析错误:“检查”附近的语法不正确。
编辑:
如果在表声明中创建约束,也会出现同样的错误。
Azure SQL 数据仓库目前不支持此和一般约束。有关完整列表,请参阅https://learn.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-overview#unsupported-table-features。
如果约束没有在源中强制执行,或者如果您有多个源,您可以在 ETL 或 ELT 过程中实施。对于小型数据集,ETL 可能会更好。对于大型数据集,您可能会通过 ELT-L 获得更好的性能。如提取然后加载到临时表(堆很快),执行检查/清理然后加载到最终表。
Azure SQL 数据仓库的语法文档
CREATE TABLE
根本没有提到约束,也没有提到除和CHECK
约束之外的任何其他类型的约束。NOT NULL
DEFAULT
我假设
CHECK
此产品不支持约束。简单的谈话文章: Robert Sheldon将 Azure SQL 数据仓库用于试驾,清楚地说明了这一点:
我使用一个空表重新创建了这个测试并且没有遇到这个错误。为了确认起见,我建议将语句格式化为:
如果您遇到相同的错误,请告诉我们,并确保在您的批处理中只运行此语句。
虽然这里不太可能出现问题,但请记住,如果
[FactTbl_Test]
已经包含 的[Test_Id]
值'Unknown'
,ADD CONSTRAINT
则会失败。您可以在表名之后使用该选项WITH NOCHECK
,这将创建约束而不根据现有数据对其进行验证。