BigQuery 中是不是有自动增量功能?
Posted
技术标签:
【中文标题】BigQuery 中是不是有自动增量功能?【英文标题】:Is there an Autoincrement in BigQuery?BigQuery 中是否有自动增量功能? 【发布时间】:2017-01-16 08:25:52 【问题描述】:BigQuery 中是否有 AUTO_INCREMENT、SERIAL、IDENTITY 或序列之类的内容?
我知道 ROW_NUMBER https://cloud.google.com/bigquery/query-reference#row-number 但我想为表中的每一行保留一个生成的唯一 ID。
【问题讨论】:
ROW_NUMBER 会起作用,如果您运行查询来为每一行计算一个新的“id”列(并将结果保存为新表)。也就是说,我很好奇为什么你想这样做——BigQuery 并不是真正用于按键单行查找(你必须扫描整个表),我想一些列的其他组合将为该行提供更有意义的“身份”。这只是为了在下游的另一个系统中使用吗? 我希望能够将来自多个来源的数据集成到 BQ 中的同一个表中。那些数据源已经有了ID,但是可能会互相冲突,所以我想有一个统一的ID,方便以后访问。关于通过 ID 访问,我计划在 Datastore 中保留新旧 ID 之间的地图缓存版本,这样大部分时间我就不需要在 BQ 中进行单行查找。 有道理。我又添加了一些建议。如果这只是您的数据源的联合,则以命名空间为前缀的键可能是确保唯一性的最简单解决方案(如果您以后必须重新生成它,它将比 ROW_NUMBER 更稳定)。 听起来很有趣。我会试一试。谢谢:) 【参考方案1】:BigQuery 没有在加载时生成行键的概念。您可以rewrite the table with a query 为您的行生成任意键。
正如您所指出的,ROW_NUMBER 将为您提供每一行的唯一索引,但您可以点击size limits for particularly large tables(因为您需要一个未分区的窗口函数来覆盖所有内容)。
如果您可以容忍更大的字符串键,您可以考虑为每一行生成一个 UUID(这可以随机完成,并且不需要与您的其余数据协调)。如果您使用的是标准 SQL(并且应该!)GENERATE_UUID() function 将完成此操作。
在链接的答案中,Felipe 构造了一个复合键,如果您的键的组合不同,它也可能对您有用。
【讨论】:
以上是关于BigQuery 中是不是有自动增量功能?的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Dataflow 中的“辅助输入”是不是支持从 BigQuery 视图中读取?