選択リストの列を明示的に指定する必要があります。列自身が動的であることは不可能です。あなたは配列として戻って結果を取得して大丈夫であれば、あなたはこのような何かを行うことができます:
#standardSQL
WITH T AS (
SELECT '/A/B/C/17628.html' AS path UNION ALL
SELECT '/A/D/E/F/178.html' AS path
)
SELECT
ARRAY(SELECT IFNULL(subpaths[SAFE_OFFSET(x)], '')
FROM UNNEST(GENERATE_ARRAY(0, 19)) AS x) AS paths
FROM (
SELECT SPLIT(path, '/') AS subpaths
FROM T
);
あなたはあなたができるなど、path_2
、path_1
明示的な列たい場合:
#standardSQL
WITH T AS (
SELECT '/A/B/C/17628.html' AS path UNION ALL
SELECT '/A/D/E/F/178.html' AS path
)
SELECT
subpaths[SAFE_OFFSET(1)] AS path_1,
subpaths[SAFE_OFFSET(2)] AS path_2,
subpaths[SAFE_OFFSET(3)] AS path_3,
subpaths[SAFE_OFFSET(4)] AS path_4,
subpaths[SAFE_OFFSET(5)] AS path_5,
subpaths[SAFE_OFFSET(6)] AS path_6,
subpaths[SAFE_OFFSET(7)] AS path_7,
subpaths[SAFE_OFFSET(8)] AS path_8,
subpaths[SAFE_OFFSET(9)] AS path_9,
subpaths[SAFE_OFFSET(10)] AS path_10,
subpaths[SAFE_OFFSET(11)] AS path_11,
subpaths[SAFE_OFFSET(12)] AS path_12,
subpaths[SAFE_OFFSET(13)] AS path_13,
subpaths[SAFE_OFFSET(14)] AS path_14,
subpaths[SAFE_OFFSET(15)] AS path_15,
subpaths[SAFE_OFFSET(16)] AS path_16,
subpaths[SAFE_OFFSET(17)] AS path_17,
subpaths[SAFE_OFFSET(18)] AS path_18,
subpaths[SAFE_OFFSET(19)] AS path_19,
subpaths[SAFE_OFFSET(20)] AS path_20
FROM (
SELECT SPLIT(path, '/') AS subpaths
FROM T
);
以来の私は私の端末で簡単なワンライナーを実行した、手でそのリストを書きたくありませんでした:
for i in `seq 1 20`; do echo "subpaths[SAFE_OFFSET($i)] AS path_$i,"; done
'' /A/B/C/17628.html ''のURIで期待されるクエリの出力は?独自のコードで作成しない限り、列を動的に作成することはできませんが、それぞれにURIの一部が含まれる5つの行を取得する予定ですか? –
私のデータセットは、最初の列にURIを持っています。クエリ出力には、列内に異なるサブディレクトリ(path1、path2 ... pathn)が必要です。 URIに1つのサブディレクトリがある場合、path2 ... pathnはnullとして入力されます。 –
私はこのようなものが欲しいです(コードは正しくありません):SELECT CON(パス、i)FROM(1からMAX(LENGTH(URI)-LENGTH(REPLACE(URI、 '/'、 ''))) [my_table_URI] –