Allgemeine Leitlinien für die Ausführung von Abfragen in Query Service
In diesem Dokument werden wichtige Informationen beschrieben, die Sie beim Schreiben von Abfragen in Adobe Experience Platform Query Service beachten sollten.
Ausführliche Informationen zur in Query Service verwendeten SQL-Syntax finden Sie in der SQL-Syntax-Dokumentation.
Abfrageausführungsmodelle
Adobe Experience Platform Query Service verfügt über zwei Modelle der Abfrageausführung: interaktiv und nicht interaktiv. Die interaktive Ausführung wird für die Abfrageentwicklung und die Berichterstellung in Business Intelligence-Tools verwendet, während die nicht interaktive Ausführung für größere Aufträge und operative Abfragen als Teil eines Datenverarbeitungs-Workflows verwendet wird.
Interaktive Abfrageausführung
Abfragen können interaktiv ausgeführt werden, indem sie über die Query Service-Benutzeroberfläche oder über einen verbundenen Client) gesendet. Wenn Query Service über einen verbundenen Client ausgeführt wird, wird eine aktive Sitzung zwischen dem Client und Query Service ausgeführt, bis entweder die gesendete Abfrage zurückgegeben wird oder eine Zeitüberschreitung auftritt.
Die interaktive Ausführung von Abfragen hat die folgenden Einschränkungen:
LIMIT 0
in Ihre Abfrage ein. Die maximale Wartezeit von 10 Minuten für die Abfrage gilt weiterhin.Standardmäßig werden die Ergebnisse interaktiver Abfragen an den Client zurückgegeben und nicht beibehalten. Um die Ergebnisse als Datensatz in Experience Platform beizubehalten, muss die Abfrage die CREATE TABLE AS SELECT
Syntax verwenden.
Nicht interaktive Abfrageausführung
Über die Query Service-API gesendete Abfragen werden nicht interaktiv ausgeführt. Eine nicht interaktive Ausführung bedeutet, dass Query Service den API-Aufruf erhält und die Abfrage in der Reihenfolge ausführt, in der sie empfangen wird. Nicht interaktive Abfragen führen immer entweder zur Generierung eines neuen Datensatzes, Experience Platform die Ergebnisse zu erhalten, oder zur Einfügung neuer Zeilen in einen vorhandenen Datensatz.
Zugriff auf ein bestimmtes Feld innerhalb eines Objekts
Um auf ein Feld innerhalb eines Objekts in Ihrer Abfrage zuzugreifen, können Sie entweder die Punktnotation (.
) oder die Klammernotation ([]
) verwenden. Die folgende SQL-Anweisung verwendet Punktnotation, um das endUserIds
Objekt bis zum mcid
Objekt zu durchlaufen.
SELECT endUserIds._experience.mcid
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
Die folgende SQL-Anweisung verwendet die Klammernotation, um das endUserIds
Objekt bis zum mcid
Objekt zu durchlaufen.
SELECT endUserIds['_experience']['mcid']
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
Beide obigen Beispielabfragen geben ein reduziertes Objekt anstelle eines einzelnen Werts zurück:
endUserIds._experience.mcid
--------------------------------------------------------
(48168239533518554367684086979667672499,"(ECID)",true)
(1 row)
Das zurückgegebene endUserIds._experience.mcid
-Objekt enthält die entsprechenden Werte für die folgenden Parameter:
id
namespace
primary
Wenn die Spalte nur für das -Objekt deklariert wird, wird das gesamte -Objekt als Zeichenfolge zurückgegeben. Um nur die ID anzuzeigen, verwenden Sie:
SELECT endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
endUserIds._experience.mcid.id
----------------------------------------
48168239533518554367684086979667672499
(1 row)
Anführungszeichen
Einfache Anführungszeichen, doppelte Anführungszeichen und rückwärtige Anführungszeichen werden in Abfragen des Abfrage-Service unterschiedlich verwendet.
Einfache Anführungszeichen
Das einfache Anführungszeichen ('
) wird verwendet, um Textzeichenfolgen zu erstellen. Beispielsweise kann sie in der SELECT
-Anweisung verwendet werden, um einen statischen Textwert im Ergebnis zurückzugeben, und in der WHERE
-Klausel, um den Inhalt einer Spalte auszuwerten.
Die folgende Abfrage deklariert einen statischen Textwert ('datasetA'
) für eine Spalte:
SELECT
'datasetA',
timestamp,
web.webPageDetails.name
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Die folgende Abfrage verwendet eine Zeichenfolge in einfachen Anführungszeichen ('homepage'
) in ihrer WHERE-Klausel, um Ereignisse für eine bestimmte Seite zurückzugeben.
SELECT
timestamp,
endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE web.webPageDetails.name = 'homepage'
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Doppelte Anführungszeichen
Das doppelte Anführungszeichen ("
) wird verwendet, um eine Kennung mit Leerzeichen zu deklarieren.
Die folgende Abfrage verwendet doppelte Anführungszeichen, um Werte aus angegebenen Spalten zurückzugeben, wenn eine Spalte ein Leerzeichen in ihrer Kennung enthält:
SELECT
no_space_column,
"space column"
FROM
( SELECT
'column1' as no_space_column,
'column2' as "space column"
)
Zurück Anführungszeichen
Die `
für rückwärts gerichtete Anführungszeichen wird verwendet, um reservierte Spaltennamen (nur ) bei Verwendung der Punktnotation-Syntax mit Escape-Zeichen zu versehen. Da order
beispielsweise ein reserviertes Wort in SQL ist, müssen Sie für den Zugriff auf das Feld commerce.order
Anführungszeichen verwenden:
SELECT
commerce.`order`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Backquotes werden auch verwendet, um auf ein Feld zuzugreifen, das mit einer Zahl beginnt. Um beispielsweise auf die 30_day_value
zuzugreifen, müssten Sie die Notation „Zurück“ verwenden.
SELECT
commerce.`30_day_value`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Wenn Sie Klammernotation verwenden sind Anführungszeichen erforderlich.
SELECT
commerce['order']
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Anzeigen von Tabelleninformationen
Nachdem Sie eine Verbindung zum Abfrage-Service hergestellt haben, können Sie alle verfügbaren Tabellen in Platform mit den Befehlen \d
oder SHOW TABLES
anzeigen.
Standard-Tabellenansicht
Der Befehl \d
zeigt die standardmäßige PostgreSQL für die Auflistung von Tabellen an. Nachfolgend finden Sie ein Beispiel für die Ausgabe dieses Befehls:
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | luma_midvalues | table | postgres
public | luma_postvalues | table | postgres
(2 rows)
Detaillierte Tabellenansicht
SHOW TABLES
Befehl ist ein benutzerdefinierter Befehl, der detailliertere Informationen zu den Tabellen bereitstellt. Nachfolgend finden Sie ein Beispiel für die Ausgabe dieses Befehls:
name | dataSetId | dataSet | description | resolved
-----------------+--------------------------+----------------+-------------+----------
luma_midvalues | 5bac030c29bb8d12fa992e58 | Luma midValues | | false
luma_postvalues | 5c86b896b3c162151785b43c | Luma midValues | | false
(2 rows)
Schemainformationen
Um detailliertere Informationen über die Schemata in der Tabelle anzuzeigen, können Sie den Befehl \d {TABLE_NAME}
verwenden, wobei {TABLE_NAME}
der Name der Tabelle ist, deren Schemainformationen angezeigt werden sollen.
Das folgende Beispiel zeigt die Schemainformationen für die luma_midvalues
, die durch Verwendung von \d luma_midvalues
angezeigt würden:
Table "public.luma_midvalues"
Column | Type | Collation | Nullable | Default
-------------------+-----------------------------+-----------+----------+---------
timestamp | timestamp | | |
_id | text | | |
productlistitems | anyarray | | |
commerce | luma_midvalues_commerce | | |
receivedtimestamp | timestamp | | |
enduserids | luma_midvalues_enduserids | | |
datasource | datasource | | |
web | luma_midvalues_web | | |
placecontext | luma_midvalues_placecontext | | |
identitymap | anymap | | |
marketing | marketing | | |
environment | luma_midvalues_environment | | |
_experience | luma_midvalues__experience | | |
device | device | | |
search | search | | |
Darüber hinaus können Sie weitere Informationen zu einer bestimmten Spalte erhalten, indem Sie den Namen der Spalte an den Tabellennamen anhängen. Dies würde im Format \d {TABLE_NAME}_{COLUMN}
geschrieben.
Das folgende Beispiel zeigt zusätzliche Informationen für die web
Spalte und wird mithilfe des folgenden Befehls aufgerufen: \d luma_midvalues_web
:
Composite type "public.luma_midvalues_web"
Column | Type | Collation | Nullable | Default
----------------+-----------------------------------+-----------+----------+---------
webpagedetails | luma_midvalues_web_webpagedetails | | |
webreferrer | web_webreferrer | | |
Datensätze verknüpfen
Sie können mehrere Datensätze verbinden, um Daten aus anderen Datensätzen in Ihre Abfrage aufzunehmen.
Das folgende Beispiel würde die beiden folgenden Datensätze (your_analytics_table
und custom_operating_system_lookup
) verbinden und eine SELECT
-Anweisung für die 50 wichtigsten Betriebssysteme nach Anzahl der Seitenansichten erstellen.
Abfrage
SELECT
b.operatingsystem AS OperatingSystem,
SUM(a.web.webPageDetails.pageviews.value) AS PageViews
FROM your_analytics_table a
JOIN custom_operating_system_lookup b
ON a._experience.analytics.environment.operatingsystemID = b.operatingsystemid
WHERE TIMESTAMP >= TO_TIMESTAMP('2018-01-01') AND TIMESTAMP <= TO_TIMESTAMP('2018-12-31')
GROUP BY OperatingSystem
ORDER BY PageViews DESC
LIMIT 50;
Ergebnisse
Deduplizierung
Der Abfrage-Service unterstützt die Datendeduplizierung oder das Entfernen doppelter Zeilen aus Daten. Weitere Informationen zur Deduplizierung finden Sie im Handbuch zur Deduplizierung des Abfrage-Service.
Zeitzonenberechnungen im Abfrage-Service
Query Service standardisiert persistierte Daten in Adobe Experience Platform mithilfe des UTC-Zeitstempelformats. Weitere Informationen zur Übersetzung Ihrer Zeitzonenanforderungen in und aus einem UTC-Zeitstempel finden Sie im FAQ-Abschnitt zum Ändern der Zeitzone in und von einem UTC-Zeitstempel.
Nächste Schritte
In diesem Dokument haben Sie eine Einleitung zu wichtigen Überlegungen beim Schreiben von Abfragen mit Query Service erhalten. Weitere Informationen zur Verwendung der SQL-Syntax zum Schreiben eigener Abfragen finden Sie in der SQL-Syntax-Dokumentation.
Weitere Beispiele für Abfragen, die im Abfrage-Service verwendet werden können, finden Sie in der Dokumentation zu folgenden Anwendungsfällen: