我有以下表格架构:
+-----+---------+----------+
+ chn | INTEGER | NULLABLE |
+-----+---------+----------|
+ size| STRING | NULLABLE |
+-----+---------+----------|
+ char| REPEATED| NULLABLE |
+-----+---------+----------|
+ ped | INTEGER | NULLABLE |
+-----+---------+----------
当我点击Google BigQuery Web UI中的“预览”时,我得到以下结果:
但是当我查询我的表时,我得到了这个结果:
似乎“预览”将我重复的字段解释为数组,我希望在查询中获得相同的结果以限制行数。
我确实尝试取消选中“使用旧版SQL”,这给了我相同的结果,但问题是使用我的表,使用“使用旧版SQL”执行相同的查询大约需要1.0秒检查并且在未经检查的情况下约为12秒。
我在这里寻找速度,所以不幸的是,不使用旧版SQL不是一个选择......
是否有另一种方式来渲染我的重复字段,就像在“预览”中那样?
感谢您的帮助:)
答案 0 :(得分:2)
是否有另一种方式来渲染我重复的字段,就像它在 "预览" ?
要在Web UI中查看Legacy SQL的原始未展平输出,我曾经设置了相应的选项(单击显示选项)以实际将输出写入带有已检查Allow Large Results
的表并且未选中Flatten Results
。
这实际上不仅将结果保存到表中,而且还以与预览相同的方式显示结果(因为它实际上是该表的预览)。为了确保表格在之后被删除 - 我已经专注了#34;数据集(临时),默认过期设置为1天(或小时 - 取决于您想要对垃圾的攻击程度),因此您不必担心该表 - 它会自动被删除为了你。想要注意:这是我们处理的一个非常常见的模式,并且不得不做额外的设置很无聊,所以我们最终得到了我们自己的自定义UI,可以自动为用户完成所有这些
答案 1 :(得分:2)
在旧版SQL中,默认情况下,BigQuery会平滑查询结果。这意味着两件事:
RECORD
字段的所有子字段都会传播到顶级字段,其名称已从record.subrecord.leaf
更改为record_subrecord_leaf
。将从架构中删除父记录。FLATTEN
函数非常相似。)你在这里看到的是#2的产物。每个重复的值都成为它自己的行(正如你可以通过两个图像中左侧的行计数看到的那样),并且对于每个新行重复其他列的值。
您可以通过几种方式阻止此行为并获得“不受欢迎的结果”。
flattenResults
参数设置为false。这还需要指定目标表并将allowLargeResults
设置为false。如果要在UI中设置它们,可以在查询编辑器下方的Show Options
面板中找到它们。如果你不想保留目的地表的临时性,米哈伊尔有一些很好的建议。我应该注意,遗留SQL有很多极端情况,flattenResults
设置为false,如果你开始编写更复杂的查询,可能会让你失望。一个突出的例子是您不能使用旧SQL在查询结果中输出多个独立重复的字段,但您可以使用标准SQL输出多个字段。这些问题不太可能在遗留SQL中解决,并且我们建议人们在遇到它们时使用标准SQL。
如果您可以使用标准SQL提供有关速度慢得多的查询的更多详细信息(例如,旧版SQL中的作业ID,标准SQL中的作业ID,以供比较),我和BigQuery团队的其他成员将非常感兴趣进一步调查。
答案 2 :(得分:1)
您看到的内容称为Flatten
。
默认情况下,UI会使查询输出变平,目前没有选项可以显示您想要的查询结果。为了产生不平坦的结果,你必须写一张桌子,但那是不同的。