【问题标题】:How to set any column as primary key in Azure SQL data warehouse如何在 Azure SQL 数据仓库中将任意列设置为主键
【发布时间】:2018-10-01 03:20:23
【问题描述】:

我正在尝试将 DB 中的一列设置为主键,但我总是收到此错误:

Azure SQL 数据仓库不支持强制的唯一约束。要创建非强制的唯一约束,您必须在语句中包含 NOT ENFORCED 语法。

在做研发的时候,发现Azure SQL数据仓库中没有主键和外键的概念,那我们怎么在里面实现呢。

有什么想法吗?

【问题讨论】:

  • SQL 数据仓库目前不支持主键或外键。你的用例是什么?
  • 我正在使用SQL数据仓库,需要在一个表中设置主键并在另一个表中设置主键,那么实现这一点的方法是什么。
  • 我已阅读 Azure SQL 数据仓库中的标识符概念代替唯一键。任何建议都相同。

标签: azure-sql-database azure-sqldw


【解决方案1】:

【讨论】:

  • 就在这里。 Azure SQL DW 不支持 DRI。
  • 如果回答了您的问题,请将其标记为答案。
  • 如果 azure sql dw 不支持主键和外键,那么由于表之间的关系是由这些键建立的,那么 azure 如何将其称为关系?
【解决方案2】:

Azure SQL 数据仓库支持这些表约束:

  • 仅当同时使用 NONCLUSTERED 和 NOT ENFORCED 时才支持 PRIMARY KEY。
  • 只有在使用 NOT ENFORCED 时才支持 UNIQUE 约束。

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

【讨论】:

    【解决方案3】:

    我刚刚在 Synapse 上注册了 StackOverflow RSS 提要。第一个提要是这篇文章。我以为这是最近的一个,但请注意它是 2 年前的,@Lurifaxel 4 天前刚刚发布了一个答案。我将学习如何在这里工作......最终。 :)

    对于主题,主键和外键等数据库约束是防止不良客户端代码破坏数据一致性的资源。这在 OLTP 数据库上非常流行(并且几乎是强制性的)。

    在 OLAP 系统中,您以批量或流的形式加载数据,您通常不希望这样做,因为它会减慢摄取过程。您通常依赖阶段表和 CTAS 技术来呈现您的表的一致版本。

    OLTP 事务不应在 Synapse 等 OLAP/BI 系统中考虑。这使得主键和外键约束变得无关紧要并且没有必要。

    如果您确实需要在表中创建主键约束,Synapse 池可以做到这一点,但它不会验证表中已经存在的数据。只会检查新数据(插入/更新)是否有重复。

    【讨论】:

      【解决方案4】:

      改变一个表来创建一个非强制和非聚集的主键,像这样:

      -- Schema: sales
      -- Table:  customer
      -- primary key column: customerid
      ALTER TABLE sales.customer
      ADD CONSTRAINT PK_customer_customerid PRIMARY KEY NONCLUSTERED (customerid) NOT ENFORCED;
      

      请记住,您必须手动确保没有任何具有重复值的行!请参阅docs 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2016-05-07
        • 2020-09-06
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        相关资源
        最近更新 更多