Ich versuche, „Video-IDs/Projektcode" aus verschiedenen Tabellen abzurufen und sie alle zu meiner Basistabelle hinzuzufügen. Alle Video-IDs haben einen Markennamen, den ich versucht habe, per Cross Join zu bekommen. Ich bin zur folgenden Abfrage gelangt und erhalte Fehler (Keine übereinstimmende Signatur für den Operator || für Argumenttypen: DATE, STRUCT. Unterstützte Signaturen: STRING || STRING; BYTES || BYTES; ARRAY || ARRAY auf meinem Schlüsselfehlercode '), weiß jemand, wie ich diese Abfrage zum Laufen bringen kann? Mein Hauptziel ist es, alle „Video-IDs/Projektcodes" in einer Tabelle zu erhalten, damit ich später die Metadaten abrufen kann. Ich würde mich über jede Hilfe freuen.
WITH
base AS
(
SELECT
LOWER(date || project_code || k.parentbreand ) key,
date,
project_code asset,
k.parentbreand brand,
FROM
UNNEST((SELECT GENERATE_DATE_ARRAY(${when(incremental(),`${constants.ads_starting_date}`, `${constants.last_fy_start}`)}, ${constants.ads_ending_date}))) AS date
CROSS JOIN (SELECT DISTINCT ParentBrand FROM ${ref("master_brand_key_views")} UNION ALL
SELECT DISTINCT Parent_Brand FROM ${ref("master_brand_parent_list")} WHERE (New_Vertical = '*' AND Parent_Brand <> '*')
OR LOWER(Parent_Brand) in ('*','*','*','*','*','*','*','*')) k
CROSS JOIN ((SELECT COALESCE(REGEXP_EXTRACT(upper(title), r'([A-Za-z0-9]+)SC\b'),
regexp_extract(upper(title),r'\d{6,7}?'),
regexp_extract(upper(title),r'\b[A-Za-z0-9]{6,7}\b')) FROM ${ref({database: "datamart-internal", schema: "video", name: "snapchat"})} WHERE COALESCE(REGEXP_EXTRACT(upper(title), r'([A-Za-z0-9]+)SC\b'),
regexp_extract(upper(title),r'\d{6,7}?'),
regexp_extract(upper(title),r'\b[A-Za-z0-9]{6,7}\b')) is not null)
UNION ALL (Select universal_video_id FROM ${ref({database: "datamart-internal", schema: "video", name: "facebook"})} where universal_video_id is not NULL)
UNION ALL (Select project_code FROM ${ref({database: "datamart-internal", schema: "video", name: "youtube_detailed"})} where project_code is not NULL)
UNION ALL (Select project_code FROM ${ref({database: "datamart-internal", schema: "video", name: "jwplayer_performance"})} where project_code is not NULL)) as project_code
LEFT JOIN ${ref("master_brand_parent_list")} p ON k.ParentBrand = p.Parent_Brand
LEFT JOIN ${ref({database: "datamart-internal", schema: "video", name: "snapchat"})} s ON k.ParentBrand = s.brand
LEFT JOIN ${ref({database: "datamart-internal", schema: "video", name: "facebook"})} f ON k.ParentBrand = f.brand
LEFT JOIN ${ref({database: "datamart-internal", schema: "video", name: "youtube_detailed"})} y ON k.ParentBrand = y.parent_brand
LEFT JOIN ${ref({database: "datamart-internal", schema: "video", name: "jwplayer_performance"})} j ON k.ParentBrand = j.brand
),
Lösung des Problems
Ich habe diese Änderungen vorgenommen und es hat funktioniert: Es scheint, dass es den großen Cross Join nicht richtig lesen konnte.
select
LOWER(ARRAY_TO_STRING([CAST(date AS STRING),project_code.project_code,k.parentbrand],"")) key,
date,
project_code.project_code,
k.parentbrand brand,
from(the rest)
Keine Kommentare:
Kommentar veröffentlichen