2016-11-01 9 views
1

へと次のように:ビッグクエリDML挿入-選択を私はテーブル構造(テーブル名:Recalled_transaction)を持って繰り返しテーブル

[{ 
"name": "STR_NBR", 
"type": "STRING", 
"mode": "NULLABLE" 
}, 
{ 
"name": "RGSTR_NBR", 
"type": "INTEGER", 
"mode": "NULLABLE" 
}, 
{ 
"name": "POS_TRANS_ID", 
"type": "INTEGER", 
"mode": "NULLABLE" 
}, 
{ 
"name": "SLS_DT", 
"type": "DATE", 
"mode": "NULLABLE" 
}, 
{ 
"name": "TRANS_ORIG_SRC", 
"type": "RECORD", 
"mode": "REPEATED", 
"fields": [ 
    { 
    "name": "POS_APPL_TYP_CD", 
    "type": "STRING", 
    "mode": "NULLABLE" 
    }, 
    { 
    "name": "USER_ID", 
    "type": "STRING", 
    "mode": "NULLABLE" 
    } 
] 
}, 
{ 
"name": "RECALLED_TXN", 
"type": "RECORD", 
"mode": "REPEATED", 
"fields": [ 
    { 
    "name": "POS_SEQ_NBR", 
    "type": "STRING", 
    "mode": "REPEATED" 
    }, 
    { 
    "name": "SUB_SYS_CD", 
    "type": "STRING", 
    "mode": "NULLABLE" 
    } 
] 
} 
] 

を、私は、インサートを使用してこの構造に通常のテーブルのセットから挿入したいです-select as(標準SQLのDML)。誰も以前にしたことがありますか?どんな助けもありがとうございます。

ありがとうございました

+0

ドキュメントを見ましたか?多くの例があります - https://cloud.google.com/bigquery/sql-reference/dml-syntax –

+0

彼の質問はDMLに固有のものではなく、目的のスキーマに合わせて適切なクエリを作成する方法です問題の予想される出力情報に基づいて答えることができるかどうか疑問に思う –

+0

私の現在の要件は、2つのNONネストされたテーブルにデータがあることです。 STR_NBR、POS_TRANS_ID、RGSTR_NBRを含む1つのテーブル(table1)と、上記の4つのフィールドを持つPOS_SEQ_NBR、SIB_SYS_CDを含む別のテーブル(table2)。現在、TRANS_ORIG_SRCのデータは空白のままです。私はarray_agg(struct ....とTRANS_ORIG_SRCのためのnullのレコードを作成するので、私は "insert select as"を使用しようとしていましたが、構造体のARRAYに挿入する方法を理解できませんでした。 – DWPro

答えて

1

同じスキーマでテーブルを作成し、挿入するサンプルクエリをまとめました。 2つのテーブルがあるため、具体的にはJOINが必要で、GROUP BYを使用する必要があります。

INSERT mydataset.SampleDmlTable 
    (STR_NBR, RGSTR_NBR, POS_TRANS_ID, SLS_DT, TRANS_ORIG_SRC, RECALLED_TXN) 
WITH T AS (
    SELECT CAST(x AS STRING) AS STR_NBR, 
    10 - x AS RGSTR_NBR, 
    x AS POS_TRANS_ID, 
    DATE_SUB(CURRENT_DATE(), INTERVAL x DAY) AS SLS_DT, 
    CONCAT('foo_', CAST(x AS STRING)) AS POS_APPL_TYP_CD, 
    CAST(x AS STRING) AS USER_ID, 
    [CONCAT('bar_', CAST(x AS STRING)), 'baz'] AS POS_SEQ_NBR, 
    CAST(10 - x AS STRING) AS SUB_SYS_CD 
    FROM UNNEST([1, 1, 0, 3, 2, 2, 2]) AS x 
) 
SELECT 
    STR_NBR, 
    RGSTR_NBR, 
    POS_TRANS_ID, 
    SLS_DT, 
    ARRAY_AGG(STRUCT(POS_APPL_TYP_CD, USER_ID)) AS TRANS_ORIG_SRC, 
    ARRAY_AGG(STRUCT(POS_SEQ_NBR, SUB_SYS_CD)) AS RECALLED_TXN 
FROM T 
GROUP BY 1, 2, 3, 4; 
関連する問題