Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 在Bigquery中,如何将struct的字符串化数组转换为适当的数组?_Google Bigquery - Fatal编程技术网

Google bigquery 在Bigquery中,如何将struct的字符串化数组转换为适当的数组?

Google bigquery 在Bigquery中,如何将struct的字符串化数组转换为适当的数组?,google-bigquery,Google Bigquery,我想将数据集中每个表的标签存储到一个包含表名、标签名、标签值的表中,这样我就可以选择带有标签条件的表名,例如,其中标签名='xxx'和标签值='yyy' 通过此查询,我可以提取struct的字符串化数组,每个数组包含标签名和标签值: * FROM `mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS` WHERE option_name = 'labels' 输出如下所示: WITH output AS ( SELECT "table_name_a

我想将数据集中每个表的标签存储到一个包含表名、标签名、标签值的表中,这样我就可以选择带有标签条件的表名,例如,其中标签名='xxx'和标签值='yyy'

通过此查询,我可以提取struct的字符串化数组,每个数组包含标签名和标签值:

*
FROM `mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS`
WHERE option_name = 'labels'
输出如下所示:

WITH output AS
( 
SELECT "table_name_a" as table_name, "ARRAY<STRUCT<STRING, STRING>>" AS option_type, "[STRUCT(\"label_name_a_1\", \"label_value_a_1\"), STRUCT(\"label_name_a_2\", \"label_value_a_2\"), STRUCT(\"label_name_a_3\", \"label_value_a_3\")]" as option_value
UNION ALL
SELECT "table_name_b" as table_name, "ARRAY<STRUCT<STRING, STRING>>" AS option_type, "[STRUCT(\"label_name_b_1\", \"label_value_b_1\"), STRUCT(\"label_name_b_2\", \"label_value_b_2\"), STRUCT(\"label_name_b_3\", \"label_value_b_3\")]" as option_value
)

SELECT * FROM output
直观的方法是强制转换到数组并指定结构:

SELECT ARRAY<STRUCT<STRING, STRING>>[STRUCT("label_name_a_1", "label_value_a_1"), STRUCT("label_name_a_2", "label_value_a_2"), STRUCT("label_name_a_3", "label_value_a_3")]
但是我找不到一种方法来为每个选项的值动态地执行它

一个非常糟糕的解决方案是转换字符串,然后使用JSON_提取,但我认为可能有更好更简单的方法来实现它


谢谢

下面是将选项值字符串转换为数组类型的代码示例:

声明选项值默认选择选项值 来自'zyun.INFORMATION\u SCHEMA.TABLE\u选项` 其中选项_name='labels' 表_name='test'; 声明标签数组; 执行立即选择数组| |选项值到标签; 选择标签; 输出:

SELECT label; -- at [9:1]
+-----------------------------------------------------------+
|                           label                           |
+-----------------------------------------------------------+
| [{"key":"aaa","value":"bbb"},{"key":"ccc","value":"ddd"}] |
+-----------------------------------------------------------+

伟大的我只需要弄清楚如何在任意数量的表上运行它,目标是安排一个查询,该查询将在一个表中存储数据集中每个表的所有标签和标签值