2017-06-21 51 views
0

標準のSQLを使用して、最後から3番目の部分文字列を抽出します。Google Big Queryの最後から3番目の部分文字列

Example Input: "Search-site-variable-brand-0-city-none-18053517" 
Output: "city" 
+0

あなたが「第二のサブストリング」によって何を意味するのか明確にすることができます! 「都市」は私の3番目の部分文字列のように見えます。私はあなたが数字ベースの部分文字列をスキップすることを意図していると思っていますか?ちょうど大声で考えています –

+0

@MikhailBerlyantありがとう、私はトピックを編集しました – Zzema

答えて

2

この変換を複数の列に適用する場合は、論理をUDFにプルすると便利な場合があります。ここではそれを行う方法の例です:BigQueryの標準SQLのための

CREATE TEMP FUNCTION SecondSubstringFromEnd(s STRING) AS ((
    SELECT arr[SAFE_OFFSET(ARRAY_LENGTH(arr) - 3)] 
    FROM (
    SELECT SPLIT(s, '-') AS arr 
) 
)); 

WITH Input AS (
    SELECT 'Search-site-variable-brand-0-city-none-18053517' AS str UNION ALL 
    SELECT 'a-b' UNION ALL 
    SELECT 'w-x-yyy-z' 
) 
SELECT 
    str, 
    SecondSubstringFromEnd(str) AS second_substring_from_end 
FROM Input; 
+0

ビューを保存できませんでした。ビュー内にCREATE TEMPORARY FUNCTIONステートメントはサポートされていません – Zzema

1

このトリックを行う可能性があります:

WITH data AS(
    select "Search-site-variable-brand-0-city-none-18053517" as Input 
) 

SELECT 
    CASE WHEN ARRAY_LENGTH(SPLIT(Input, '-')) > 3 THEN SPLIT(Input, '-')[OFFSET(ARRAY_LENGTH(SPLIT(Input, '-')) - 3)] END word 
FROM data 

これは、文字列は、空の文字列としてスプリットを、持っていない場合にはNULLを返します。

0

さらにいくつかのバリエーション:

#standardSQL 
WITH YourTable AS(
    SELECT 'Search-site-variable-brand-0-city-none-18053517' AS Input UNION ALL 
    SELECT 'Second-substring-from-the-end-in-Google-BigQuery' UNION ALL 
    SELECT 'bigQuery-assign-a-value-to-table-1-based-on-table-2' UNION ALL 
    SELECT 'Error-Message-Too-many-sources-provided-15285-Limit-is-10000' UNION ALL 
    SELECT 'Google-Bigquery-data-import-from-Google-Analytics-360' UNION ALL 
    SELECT 'Bigquery-Partitioning-data-past-2000-limit' 
) 
SELECT 
    Input, 
    REVERSE(SPLIT(REVERSE(Input), '-')[SAFE_ORDINAL(3)]) AS Output_1, 
    ARRAY_REVERSE(SPLIT(Input, '-'))[SAFE_ORDINAL(3)] AS Output_2 
FROM YourTable 
関連する問題