2017-06-21 1 views
0

Ich benutze Standard-SQL und möchte dritte Teilzeichenfolge vom Ende extrahieren.Dritte Teilzeichenfolge vom Ende in Google Big Query

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

können Sie klären, was Sie durch „zweite Teilkette“ bedeuten ?! "Stadt" sieht für mich wie eine dritte Teilkette aus. Ich denke, dass Sie ziffernbasierte Teilstrings überspringen sollten? nur laut denken –

+0

@MikhailBerLyant danke, ich habe das Thema – Zzema

Antwort

2

Ich wollte nur darauf hinweisen, dass es sinnvoll sein kann, die Logik in eine UDF zu ziehen, wenn Sie diese Transformation auf mehrere Spalten anwenden möchten. Hier ist ein Beispiel dafür, wie das zu tun:

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

bearbeitet Ansicht konnte nicht gespeichert werden. Keine Unterstützung für CREATE TEMPORARY FUNCTION-Anweisungen in Ansichten – Zzema

1

Dies könnte den Trick:

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 

Es gibt NULL falls die Zeichenfolge keinen Splitten, wie leere Saiten haben.

0

paar Variationen für BigQuery Standard-SQL:

#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 
Verwandte Themen