google-cloud-spanner - 一个表如何与两个表交错?

标签 google-cloud-spanner

假设我有架构

CREATE TABLE Account (
AccountId BYTES(MAX),
Foo STRING(1024)
) PRIMARY KEY (AccountId);"

CREATE TABLE Customer (
CustomerId BYTES(MAX),
Bar STRING(1024)
) PRIMARY KEY (CustomerId);"

然后我创建了一个新表:

CREATE TABLE Order (
AccountId BYTES(MAX),
CustomerId BYTES(MAX),
Baz STRING(1024)
) PRIMARY KEY (AccountId, CustomerId);"

我想INTERLEAVE Account Customer。如何做到这一点?我熟悉如何在构建层次结构时对一个表进行INTERLEAVE,但不确定如何使用两个表实现此目的。

最佳答案

您不能将一个表交错放置在另外两个表中,但您可以创建交错表的层次结构。在您的示例中,这意味着将 Account 表中的 Customer 表与 Customer 中的 Order 表交错> 像这样的表格:

CREATE TABLE Account (
  AccountId BYTES(MAX),
  Foo STRING(1024)
) PRIMARY KEY (AccountId);

CREATE TABLE Customer (
  AccountId BYTES(MAX),
  CustomerId BYTES(MAX),
  Bar STRING(1024)
) PRIMARY KEY (AccountId, CustomerId),
INTERLEAVE IN PARENT Account;

CREATE TABLE Order (
  AccountId BYTES(MAX),
  CustomerId BYTES(MAX),
  OrderId BYTES(MAX),
  Baz STRING(1024)
) PRIMARY KEY (AccountId, CustomerId, OrderId),
INTERLEAVE IN PARENT Customer;

您不能按照您要求的方式在另外两个表中交错一个表的原因是,交错表实际上意味着 Cloud Spanner 会将交错子表的行与父表物理地存储在一起。如果您将一个表与两个不同的、不相关的父表交错放置,则无法确定子行的存储位置。

关于google-cloud-spanner - 一个表如何与两个表交错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977640/

相关文章:

database - 是否可以重命名列?

mysql - 将大数据插入 Cloud Spanner 表

java - 使用 Java 时如何在 Spanner 中实现分页

google-cloud-platform - Google Cloud Functions 是否有拆卸钩子(Hook)?

google-cloud-spanner - 理解 Spanner 解释

google-cloud-dataflow - com.google.cloud.spanner.SpannerException : DEADLINE_EXCEEDED

google-cloud-platform - 使用谷歌 Spanner 和sequelize.js

node.js - 基于 Spanner 数据库中的插入/更新创建触发器

sql - 在 google cloud spanner 中查询数组

google-cloud-platform - Cloud Spanner 读取与 Cloud Spanner SQL API