【问题标题】:BigQuery INSERT SELECT results in random order of records?BigQuery INSERT SELECT 导致记录的随机顺序?
【发布时间】:2020-02-02 10:25:11
【问题描述】:

我使用标准 SQL 在 BigQuery 中使用 Jupyter Notebook 将数据从一个表插入到另一个表。

例如我有两个表:

表1

    ID  Product
0   1   book1
1   2   book2
2   3   book3

表2

    ID  Product Price
0   5   book5   8.0
1   6   book6   9.0
2   4   book4   3.0

我使用了以下代码

INSERT test_data.table1
SELECT *
FROM test_data.table2
ORDER BY Price;

SELECT *
FROM test_data.table1

我明白了

    ID  Product
0   1   book1
1   3   book3
2   2   book2
3   5   book5
4   6   book6
5   4   book4

我预计它会按 ID 1 2 3 4 5 6 的顺序出现,其中 4,5,6 是按价格排序的

似乎数据 INSERT 和/或 SELECT FROM 在不同的运行中以随机顺序显示记录。

如何控制 SELECT FROM 输出而不在输出表中包含“价格”列以便对它们进行排序?

当我导入一个 csv 文件创建一个新表时发生了这种情况,使用 SELECT FROM 显示它们时记录顺序是随机的。

【问题讨论】:

  • 您需要一个确定的列才能对 BQ 的结果进行排序。
  • 太棒了!我会用一个。

标签: google-bigquery


【解决方案1】:

ORDER BY 子句将列或表达式指定为结果集的排序标准。
如果不存在 ORDER BY 子句,则未定义查询结果的顺序强>.
允许来自 FROM 子句或 SELECT 列表的列别名。如果查询在 SELECT 子句中包含别名,则这些别名会覆盖相应 FROM 子句中的名称。

所以,你很可能想要像下面这样的东西

SELECT *
FROM test_data.table1
ORDER BY Price DESC 
LIMIT 100

注意LIMIT 的使用 - 这是重要的部分 - 如果您要对大量值进行排序,请使用 LIMIT 子句以避免资源超出类型的错误

【讨论】:

  • 谢谢。我需要保留价格列或使用 ID 列。如何确保导入表中的数据与原始csv文件的顺序一致?
  • 正如我在答案中提到的 - 没有存储数据的物理顺序之类的东西。但是您可以控制输出中的顺序-答案中也对此进行了描述
猜你喜欢
  • 2012-07-09
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多