Google bigquery 如何选择没有别名的bigquery表的第n列?

Google bigquery 如何选择没有别名的bigquery表的第n列?,google-bigquery,Google Bigquery,有没有办法从没有别名的查询中选择特定列?使用BigQuery遗留SQL可以引用fn sh-3.2$ bq shell Welcome to BigQuery! (Type help for more information.) bqaccount> select 1; Waiting on bqjob_r42d56b0f0c2a3eb9_00000164b439b383_1 ... (0s) Current status: DONE +-----+ | f0_ | +-----+ |

有没有办法从没有别名的查询中选择特定列?

使用BigQuery遗留SQL可以引用fn

sh-3.2$ bq shell
Welcome to BigQuery! (Type help for more information.)
bqaccount> select 1;
Waiting on bqjob_r42d56b0f0c2a3eb9_00000164b439b383_1 ... (0s) Current status: DONE
+-----+
| f0_ |
+-----+
|   1 |
+-----+
bqaccount> select f0_ from (select 1);
Error in query string: Error processing job 'bqaccount:bqjob_r7d8d3d2925de7c0c_00000164b439def3_1': Unrecognized name: f0_ at [1:8]
结果是

#legacySQL
SELECT f2_, f0_, f1_
FROM (SELECT 1, 2, 3)
但看起来BigQuery标准SQL不支持它

下面是BigQuery标准SQL的一个变通方法

Row f2_ f0_ f1_  
1   3   1   2    
结果

#standardSQL
SELECT 
  cols[OFFSET(0)],
  cols[OFFSET(1)],
  cols[OFFSET(2)],
  cols[OFFSET(3)],
  cols[OFFSET(4)]
FROM (
  SELECT REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'"[^"]?":"?(\w*)"?') cols
  FROM (SELECT 1, 2, 3, 'abc', CURRENT_DATE()) t
)

使用BigQuery遗留SQL可以引用fn

sh-3.2$ bq shell
Welcome to BigQuery! (Type help for more information.)
bqaccount> select 1;
Waiting on bqjob_r42d56b0f0c2a3eb9_00000164b439b383_1 ... (0s) Current status: DONE
+-----+
| f0_ |
+-----+
|   1 |
+-----+
bqaccount> select f0_ from (select 1);
Error in query string: Error processing job 'bqaccount:bqjob_r7d8d3d2925de7c0c_00000164b439def3_1': Unrecognized name: f0_ at [1:8]
结果是

#legacySQL
SELECT f2_, f0_, f1_
FROM (SELECT 1, 2, 3)
但看起来BigQuery标准SQL不支持它

下面是BigQuery标准SQL的一个变通方法

Row f2_ f0_ f1_  
1   3   1   2    
结果

#standardSQL
SELECT 
  cols[OFFSET(0)],
  cols[OFFSET(1)],
  cols[OFFSET(2)],
  cols[OFFSET(3)],
  cols[OFFSET(4)]
FROM (
  SELECT REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'"[^"]?":"?(\w*)"?') cols
  FROM (SELECT 1, 2, 3, 'abc', CURRENT_DATE()) t
)

可以强制转换为具有列名称的结构:

Row f0_ f1_ f2_ f3_ f4_  
1   1   2   3   abc 2018     

可以强制转换为具有列名称的结构:

Row f0_ f1_ f2_ f3_ f4_  
1   1   2   3   abc 2018     

我想第一个?在

选择REGEXP\u EXTRACT\u ALLTO\u JSON\u STRINGt,r'[^]?:?\w*?'列


…应该是*或+

我想第一个?在

选择REGEXP\u EXTRACT\u ALLTO\u JSON\u STRINGt,r'[^]?:?\w*?'列


…应该是*或+

不错的!如果您想像我一样选择第一列不为null的所有行,您可以简化为REGEXP_extracto_JSON_string,r'{[^]+:?\w*?“null”可以通过REGEXP_CONTAINS来检查null,但无论如何-非常感谢您使用json字符串的想法。还有一个小问题…值可以包含不仅仅是单词字符…您的解决方案可以扩展为使用[^]*在值部分,就像你在引号中使用键一样。很好!如果你想像我一样选择第一列不为null的所有行,你可以简化为REGEXP_EXTRACTTO_JSON_STRINGt,r'{[^]+:?\w*?“null”可以通过REGEXP_CONTAINS来检查null,但无论如何-非常感谢您使用json字符串的想法。还有一点…值可以包含不仅仅是单词字符…您的解决方案可以扩展为在值部分使用[^]*,就像在引号中使用键一样。