Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Beispiele
Beispiel: Rückgabe der Kardinalität in einer Unterabfrage
Im folgenden Beispiel wird die Kardinalität für jede Skizze in einer Unterabfrage für eine Tabelle mit dem Namen Sales (Vertrieb) zurückgegeben.
CREATE TABLE Sales (customer VARCHAR, country VARCHAR, amount BIGINT); INSERT INTO Sales VALUES ('David Joe', 'Greece', 14.5), ('David Joe', 'Greece', 19.95), ('John Doe', 'USA', 29.95), ('John Doe', 'USA', 19.95), ('George Spanos', 'Greece', 9.95), ('George Spanos', 'Greece', 2.95);
Die folgende Abfrage generiert eine HLL-Skizze für die Kunden jedes Landes und extrahiert die Kardinalität. So werden die eindeutigen Kunden aus jedem Land angezeigt.
SELECT hll_cardinality(sketch), country FROM (SELECT hll_create_sketch(customer) AS sketch, country FROM Sales GROUP BY country) AS hll_subquery; hll_cardinality | country ----------------+--------- 1 | USA 2 | Greece ...
Beispiel: Rückgabe eines HLLSKETCH-Typs von kombinierten Skizzen in einer Unterabfrage
Im folgenden Beispiel wird ein einzelner HLLSKETCH-Typ zurückgegeben, der die Kombination einzelner Skizzen aus einer Unterabfrage darstellt. Die Skizzen werden mit der Aggregationsfunktion HLL_COMBINE kombiniert.
SELECT hll_combine(sketch) FROM (SELECT hll_create_sketch(customers) AS sketch FROM Sales GROUP BY country) AS hll_subquery hll_combine -------------------------------------------------------------------------------------------- {"version":1,"logm":15,"sparse":{"indices":[29808639,35021072,47612452],"values":[1,1,1]}} (1 row)
Beispiel: Rückgabe einer HyperLogLog Skizze aus der Kombination mehrerer Skizzen
Im folgenden Beispiel nehmen wir an, dass die Tabelle page-users
die voraggregierten Skizzen für jede Seite speichert, die Benutzer auf einer bestimmten Website besucht haben. Jede Zeile in dieser Tabelle enthält eine HyperLogLog Skizze, die alle Benutzer-IDs darstellt, die die besuchten Seiten zeigen.
page_users -- +----------------+-------------+--------------+ -- | _PARTITIONTIME | page | sketch | -- +----------------+-------------+--------------+ -- | 2019-07-28 | homepage | CHAQkAQYA... | -- | 2019-07-28 | Product A | CHAQxPnYB... | -- +----------------+-------------+--------------+
Im folgenden Beispiel werden die voraggregierten Skizzen zu einer einzelnen Skizze zusammengefasst. Diese Skizze kapselt die kollektive Kardinalität, die jede Skizze kapselt.
SELECT hll_combine(sketch) as sketch FROM page_users
Die Ausgabe sieht folgendermaßen oder ähnlich aus.
-- +-----------------------------------------+ -- | sketch | -- +-----------------------------------------+ -- | CHAQ3sGoCxgCIAuCB4iAIBgTIBgqgIAgAwY.... | -- +-----------------------------------------+
Wenn eine neue Skizze erstellt wird, können Sie die Funktion HLL_CARDINALITY verwenden, um die kollektiven eindeutigen Werte abzurufen, wie im Folgenden gezeigt.
SELECT hll_cardinality(sketch) FROM ( SELECT hll_combine(sketch) as sketch FROM page_users ) AS hll_subquery
Die Ausgabe sieht folgendermaßen oder ähnlich aus.
-- +-------+ -- | count | -- +-------+ -- | 54356 | -- +-------+
Beispiel: Generieren Sie mithilfe externer HyperLogLog Tabellen Skizzen anhand von S3-Daten
In den folgenden Beispielen werden HyperLogLog Skizzen zwischengespeichert, um zu vermeiden, dass zur Kardinalitätsschätzung direkt auf Amazon S3 zugegriffen wird.
Sie können HyperLogLog Skizzen vorab aggregieren und in externen Tabellen zwischenspeichern, die für Amazon S3 S3-Daten definiert sind. Auf diese Weise können Sie Kardinalitätsschätzungen extrahieren, ohne auf die zugrundeliegenden Basisdaten zuzugreifen.
Angenommen, Sie haben eine Reihe von Textdateien mit Tabulatortrennzeichen in Amazon S3 entladen. Sie führen die folgende Abfrage aus, um eine externe Tabelle mit Namen sales
im externen Amazon-Redshift-Schema mit dem Namen spectrum
zu definieren. Der Amazon S3 S3-Bucket für dieses Beispiel befindet sich im Osten der USA (Nord-Virginia) AWS-Region.
create external table spectrum.sales( salesid integer, listid integer, sellerid smallint, buyerid smallint, eventid integer, dateid integer, qtysold integer, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) row format delimited fields terminated by '\t' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales/';
Angenommen, Sie möchten die einzelnen Käufer berechnen, die einen Artikel zu einem beliebigen Datum gekauft haben. Dazu werden im folgenden Beispiel Skizzen für die Käufer-IDs für jeden Tag des Jahres generiert und das Ergebnis wird in der Amazon-Redshift-Tabelle hll_sales
gespeichert.
CREATE TABLE hll_sales AS SELECT saletime, hll_create_sketch(buyerid) AS sketch FROM spectrum.sales GROUP BY saletime; SELECT TOP 5 * FROM hll_sales;
Die Ausgabe sieht folgendermaßen oder ähnlich aus.
-- hll_sales -- | saletime | sketch | -- +-----------------+---------------------------------------------------------------------+ -- | 7/22/2008 8:30 | {"version":1,"logm":15,"sparse":{"indices":[9281416],"values":[1]}} -- | 2/19/2008 0:38 | {"version":1,"logm":15,"sparse":{"indices":[48735497],"values":[3]}} -- | 11/5/2008 4:49 | {"version":1,"logm":15,"sparse":{"indices":[27858661],"values":[1]}} -- | 10/27/2008 4:08 | {"version":1,"logm":15,"sparse":{"indices":[65295430],"values":[2]}} -- | 2/16/2008 9:37 | {"version":1,"logm":15,"sparse":{"indices":[56869618],"values":[2]}} -- +---------------- +---------------------------------------------------------------------+
Die folgende Abfrage zeigt die geschätzte Anzahl verschiedener Käufer, die am Freitag nach Thanksgiving im Jahr 2008 einen Artikel gekauft haben.
SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers FROM hll_sales WHERE trunc(saletime) = '2008-11-28';
Die Ausgabe sieht folgendermaßen oder ähnlich aus.
distinct_buyers --------------- 386
Angenommen, Sie möchten die Anzahl der eindeutigen Benutzer, die einen Artikel an einem bestimmten Datumsbereich gekauft haben abrufen. Der Zeitraum könnte sich zum Beispiel vom Black Friday bis zum darauffolgenden Montag erstrecken. Um diese Information abzurufen, verwendet die folgende Abfrage die Aggregationsfunktion hll_combine
. Mit dieser Funktion können Sie vermeiden, dass Käufer doppelt gezählt werden, die einen Artikel an mehr als einem Tag des ausgewählten Bereichs gekauft haben.
SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers FROM hll_sales WHERE saletime BETWEEN '2008-11-28' AND '2008-12-01';
Die Ausgabe sieht folgendermaßen oder ähnlich aus.
distinct_buyers --------------- 1166
Um die hll_sales
Tabelle beizubehalten up-to-date, führen Sie am Ende jedes Tages die folgende Abfrage aus. Dadurch wird auf der Grundlage der IDs der Käufer, die heute einen Artikel gekauft haben, eine HyperLogLog Skizze erstellt und der hll_sales
Tabelle hinzugefügt.
INSERT INTO hll_sales SELECT saletime, hll_create_sketch(buyerid) FROM spectrum.sales WHERE TRUNC(saletime) = to_char(GETDATE(), 'YYYY-MM-DD') GROUP BY saletime;