2016-12-12 17 views
0

とフィルター繰り返しフィールド、私は次の表を持っている:のBigQuery:レガシーSQL

row | query_params | query_values 
1  foo   bar 
     param   val 
2  foo   baz 

JSON:

{ 
"query_params" : [ "foo", "param"], 
"query_values" : [ "bar", "val" ] 
}, { 
"query_params" : [ "foo" ], 
"query_values" : [ "baz" ] 
} 

のようなものを私は自分の価値に繰り返されるフィールドをフィルタリングする従来のSQLを使用して
SELECT * FROM table WHERE query_params = 'foo' 

出力するものは

row | query_params | query_values 
1  foo   bar 
2  foo   baz  

PS:この質問は同じ質問に関連しているが、標準SQLを使用して、私が個別に各配列を平坦化した後、脇JOINを使用してから、従来のSQLのための任意のより良いアイデアを考えることができないhere

+0

の下に試してみてください私は、誰かがそれに私を打つしない限り、あなたの質問にお答えしようとするでしょうが、あなたは、従来のSQLを使用する必要がありますなぜあなたは説明できますか?我々は、標準SQLとの非互換性を認識して、それらに対処できるようにしたいと考えています。ありがとう! –

+0

カスタムダッシュボードをMode Analyticsに移行していますが、Modeが標準SQLをまだサポートしていないことがわかりました。 –

+0

確認するには、私は['#standardSQL'](https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql#sql-prefix)トリックdoesnを推測していますどちらもそこで働いていますよね? –

答えて

0

に答えています。あなたは上に示した内容のテーブルTがある場合は、行うことができます:

SELECT 
    [t1.row], 
    t1.query_params, 
    t2.query_values 
FROM 
    FLATTEN((SELECT [row], query_params, POSITION(query_params) AS pos 
      FROM T WHERE query_params = 'foo'), query_params) AS t1 
JOIN 
    FLATTEN((SELECT [row], query_values, POSITION(query_values) AS pos 
      FROM T), query_values) AS t2 
ON [t1.row] = [t2.row] AND 
    t1.pos = t2.pos; 

アイデアは'foo'に等しいquery_paramsのフィルタリング後の行と位置によって2つの配列の要素を関連付けることです。

+0

[row]は列ではありません。私はROW_NUMBER()OVER()[行]を代わりに使用しようとしましたが、「分析関数を使用した繰り返しフィールドの使用は許可されていません」 –

+0

Mode Analyticsは[BigQuery接続用の標準SQLの設定](https:// help) modeanalytics.com/articles/using-standard-or-legacy-sql/)ので、おそらくそれを使うべきです:)クエリテキスト自体に '#standardSQL'を使用することもできます。 –

+0

はい、しかし、私はモードの価格プランを増やした後、メタベースに切り替えましたが、まだ標準SQLをサポートしていません。 –

0

バージョン

SELECT [row], query_params, query_values 
    FROM (
     SELECT [row], query_params, param_pos, query_values, POSITION(query_values) AS value_pos 
     FROM FLATTEN((
      SELECT [row], query_params, POSITION(query_params) AS param_pos, query_values 
      FROM YourTable 
     ), query_params) 
     WHERE query_params = 'foo' 
    ) 
    WHERE param_pos = value_pos 
関連する問題