それはあなたの最終的な目標が何であるかを完全に明らかではないとして、間違った方向であってもよいが、私はあなたにどういうわけか
を支援してみましょうかもしれませんが、私はあなたの先テーブルが
type metric1 metric2 metric3
1 1271 518 945
1 1287 495 963
以下のようなものであることが期待される感じただ一つのフィールドにCSVなどのデータをロードする - -
だから、私の勧告は2つの段階
ステップ1であなたのそれを作るためにあるのは、フィールドdata
とテーブル
theTable
をしましょう
data
{"data": {"events": [[1, 1271, 518, 945], [1, 1287, 495, 963]]}}
{"data": {"events": [[2, 111, 222, 333], [3, 444, 555, 666], [4, 777, 888, 999]]}}
ステップ2 - 期待されるスキーマを生成するためのプロセスtheTable
(解答の上を参照)、最終的なテーブルに保存します。この特定のクエリが7サブアレイまでサポートしていますが、減少または変更することでこれを増やすことができます - あなたが見ることができるように結果が
type metric1 metric2 metric3
1 1271 518 945
1 1287 495 963
2 111 222 333
3 444 555 666
4 777 888 999
になります。この
SELECT
NTH(1, SPLIT(y)) AS type,
NTH(2, SPLIT(y)) AS metric1,
NTH(3, SPLIT(y)) AS metric2,
NTH(4, SPLIT(y)) AS metric3,
FROM (
SELECT
REPLACE(REPLACE(COALESCE(y0, y1, y2, y3, y4, y5, y6), '[', ''), ']', '') AS y
FROM (
SELECT
IF(k=0, JSON_EXTRACT(data, '$.data.events[0]'), NULL) AS y0,
IF(k=1, JSON_EXTRACT(data, '$.data.events[1]'), NULL) AS y1,
IF(k=2, JSON_EXTRACT(data, '$.data.events[2]'), NULL) AS y2,
IF(k=3, JSON_EXTRACT(data, '$.data.events[3]'), NULL) AS y3,
IF(k=4, JSON_EXTRACT(data, '$.data.events[4]'), NULL) AS y4,
IF(k=5, JSON_EXTRACT(data, '$.data.events[5]'), NULL) AS y5,
IF(k=6, JSON_EXTRACT(data, '$.data.events[6]'), NULL) AS y6,
FROM theTable AS a
CROSS JOIN (
SELECT k FROM (SELECT 0 AS k), (SELECT 1 AS k), (SELECT 2 AS k),
(SELECT 3 AS k), (SELECT 4 AS k), (SELECT 5 AS k), (SELECT 6 AS k)
) AS b
)
HAVING NOT y IS NULL
)
のクエリの下に使用することができます
#1
REPLACE(REPLACE(COALESCE(y0, y1, y2, y3, y4, y5, y6), '[', ''), ']', '') AS y
#2
0三箇所のコード最後に
IF(k=0, JSON_EXTRACT(data, '$.data.events[0]'), NULL) AS y0,
IF(k=1, JSON_EXTRACT(data, '$.data.events[1]'), NULL) AS y1,
IF(k=2, JSON_EXTRACT(data, '$.data.events[2]'), NULL) AS y2,
IF(k=3, JSON_EXTRACT(data, '$.data.events[3]'), NULL) AS y3,
IF(k=4, JSON_EXTRACT(data, '$.data.events[4]'), NULL) AS y4,
IF(k=5, JSON_EXTRACT(data, '$.data.events[5]'), NULL) AS y5,
IF(k=6, JSON_EXTRACT(data, '$.data.events[6]'), NULL) AS y6,
#3
SELECT k FROM (SELECT 0 AS k), (SELECT 1 AS k), (SELECT 2 AS k),
(SELECT 3 AS k), (SELECT 4 AS k), (SELECT 5 AS k), (SELECT 6 AS k)
、ワット/実際のデータをロードするO、ちょうど変換ロジックをテストする - あなたは、これが便利だったホープ・
スクリプト以下
SELECT
NTH(1, SPLIT(y)) AS type,
NTH(2, SPLIT(y)) AS metric1,
NTH(3, SPLIT(y)) AS metric2,
NTH(4, SPLIT(y)) AS metric3,
FROM (
SELECT
REPLACE(REPLACE(COALESCE(y0, y1, y2, y3, y4, y5, y6), '[', ''), ']', '') AS y
FROM (
SELECT
IF(k=0, JSON_EXTRACT(data, '$.data.events[0]'), NULL) AS y0,
IF(k=1, JSON_EXTRACT(data, '$.data.events[1]'), NULL) AS y1,
IF(k=2, JSON_EXTRACT(data, '$.data.events[2]'), NULL) AS y2,
IF(k=3, JSON_EXTRACT(data, '$.data.events[3]'), NULL) AS y3,
IF(k=4, JSON_EXTRACT(data, '$.data.events[4]'), NULL) AS y4,
IF(k=5, JSON_EXTRACT(data, '$.data.events[5]'), NULL) AS y5,
IF(k=6, JSON_EXTRACT(data, '$.data.events[6]'), NULL) AS y6,
FROM (
SELECT data FROM
(SELECT '{"data": {"events": [[1, 1271, 518, 945], [1, 1287, 495, 963]]}}' AS data),
(SELECT '{"data": {"events": [[2, 111, 222, 333], [3, 444, 555, 666], [4, 777, 888, 999]]}}' AS data)
) AS a
CROSS JOIN (
SELECT k FROM (SELECT 0 AS k), (SELECT 1 AS k), (SELECT 2 AS k),
(SELECT 3 AS k), (SELECT 4 AS k), (SELECT 5 AS k), (SELECT 6 AS k)
) AS b
)
HAVING NOT y IS NULL
)
を使用することができます!
最終的な表がどのように予期されるのか明確ではありません。 –
重要なので、投票の下に投稿された回答の左側にあるチェックマークを使用して、受け入れられた回答に印を付けることができます。 http://meta.stackexchangeを参照してください。com/questions/5234/how-does-a-answer-work-work#5235が重要である理由について説明します。答えに投票することも重要です。役に立った答えを投票してください。もっとたくさんあります...誰かがあなたの質問に答えるときに何をすべきかを確認することができます - http://stackoverflow.com/help/someone-answers。 –