如何向 BigQuery 添加主键和外键?

Maj*_*aie 4 database create-table google-bigquery

我正在尝试学习 bigquery,但我注意到我根本无法添加主键或外键。

这是一个例子:

CREATE TABLE db.VENDOR 
(
    V_CODE      INT64,
    V_NAME      String NOT NULL,
    V_CONTACT   String NOT NULL,
    V_AREACODE  String NOT NULL,
    V_PHONE     String NOT NULL,
    V_STATE     String NOT NULL,
    V_ORDER     String NOT NULL,
    PRIMARY KEY(V_Code)
);

CREATE TABLE db.PRODUCT 
(
    P_CODE     string Not Null,
    P_DESCRIPT string NOT NULL,
    P_INDATE   DATETIME NOT NULL,
    P_QOH      int64 NOT NULL,
    P_MIN      int64 NOT NULL,
    P_PRICE    NUMERIC NOT NULL,
    P_DISCOUNT NUMERIC NOT NULL,
    V_CODE     int64,

    CONSTRAINT PRODUCT_V_CODE_FK 
        FOREIGN KEY (V_CODE) REFERENCES VENDOR (V_CODE)
);
Run Code Online (Sandbox Code Playgroud)

当我使用主键时,出现错误:

不支持主键

对于外键我得到:

表名称“VENDOR”缺少数据集,而请求中未设置默认数据集

无论如何,可以在 BigQuery 中使用 PK 或 FK 吗?如果是,如何?

Ser*_*ron 7

查看主键外键的文档

以下示例将 x 和 y 的主键约束添加到 pk_table 表中:

ALTER TABLE pk_table ADD PRIMARY KEY (x,y) NOT ENFORCED;
Run Code Online (Sandbox Code Playgroud)

以下示例将 my_fk_name 外键约束添加到 fk_table 表中。此示例依赖于现有表 pk_table。

ALTER TABLE fk_table
ADD CONSTRAINT my_fk_name FOREIGN KEY (u, v)
REFERENCES pk_table(x, y) NOT ENFORCED;
Run Code Online (Sandbox Code Playgroud)

请注意,不强制执行键约束,因此它们不会防止重复。它们主要用于帮助优化器 -为什么创建主键和外键?

  • 有2人回答说添加了主键。但没有人提到它们不起作用:截至 2023 年 4 月 25 日,如果没有 NOT ENFORCED 子句,您将无法创建 PK。而且您可以插入具有重复 PK 的记录,因此 BigQuery 不会为您执行任何唯一性检查。我不知道提出这样一个不起作用的“功能”有什么意义。“干得好”,谷歌。 (4认同)