Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Widoki metryk tworzą semantyczną warstwę dla danych, przekształcając tabele i widoki w ustandaryzowane metryki biznesowe. Definiują, co należy mierzyć, jak je agregować i jak go segmentować. W związku z tym każdy użytkownik w organizacji raportuje tę samą wartość dla tego samego kluczowego wskaźnika wydajności, co eliminuje niespójne raportowanie i umożliwia elastyczną analizę we wszystkich polach.
Zdefiniowane składniki to źródła, sprzężenia, filtry, pola i miary.
Aby zapoznać się z pełnym przykładem sprzężeń, pól, miar i metadanych agenta, zobacz Samouczek: tworzenie widoku metryk z sprzężeniami i modelowaniem danych.
Podstawowe składniki
Widok metryki składa się z następujących elementów:
| Składnik | Description | Example |
|---|---|---|
| Source | Tabela podstawowa, widok lub zapytanie SQL zawierające dane. | samples.tpch.orders |
| łączy się z | Relacje między tabelami, widokami i widokami metryk w celu wzbogacania danych. | Łączenie orders tabeli z tabelą customers na customer_key |
| Filtry | Warunki zastosowane do danych źródłowych w celu zdefiniowania zakresu. |
|
| Fields | Kolumny używane do grupowania, filtrowania i agregowania metryk. Zawiera kolumny podzielone na kategorie i nieagregowane kolumny liczbowe. Nazywane także wymiarami. | Kategoria produktu, Miesiąc zamówienia, Cena jednostkowa |
| Środki | Agregacje kolumn, które generują metryki. |
COUNT(o_orderkey) as Order Count (Liczba zamówień) SUM(o_totalprice) jako Total Revenue (Łączny przychód) |
Definiowanie źródła
Możesz użyć elementu zawartości podobnej do tabeli lub zapytania SQL jako źródła widoku metryki. Musisz mieć co najmniej SELECT uprawnienia do dowolnego elementu zawartości, do którego odwołuje się odwołanie.
Zasób podobny do tabeli to dowolny obiekt Unity Catalog, który udostępnia schemat tabelaryczny i obsługuje SELECT zapytania, w tym tabele, widoki, widoki zmaterializowane, tabele przesyłania strumieniowego, tabele zewnętrzne, tabele systemowe i widoki miar.
Używanie elementu zawartości podobnej do tabeli jako źródła
Aby użyć elementu zawartości podobnej do tabeli jako źródła, określ w pełni kwalifikowaną nazwę. Przykład: samples.tpch.orders.
Używanie widoku metryki jako źródła
Możesz użyć istniejącego widoku metryki jako źródła dla nowego widoku metryki:
version: 1.1
source: views.examples.source_metric_view
fields:
- name: Order month
expr: '`Order Month`'
measures:
- name: Latest order month
expr: MAX(`Order month`)
- name: Latest order year
expr: "DATE_TRUNC('year', MEASURE(`Latest order month`))"
W przypadku używania widoku metryk jako źródła obowiązują te same zasady kompozycji dotyczące odwołań do pól i miar. Zobacz Kompozycyjność.
Używanie zapytania SQL jako źródła
Aby użyć zapytania SQL, napisz tekst zapytania bezpośrednio w pliku YAML:
version: 1.1
source: SELECT * FROM samples.tpch.orders o LEFT JOIN samples.tpch.customer c ON o.o_custkey
= c.c_custkey
fields:
- name: Order key
expr: o_orderkey
measures:
- name: Order Count
expr: COUNT(o_orderkey)
Note
W przypadku używania zapytania SQL jako źródła z klauzulą JOIN, ustaw ograniczenia klucza podstawowego i obcego na tabelach bazowych i użyj opcji RELY dla optymalnej wydajności zapytań. Zobacz Deklarowanie klucza podstawowego, klucza obcego i unikatowych ograniczeń oraz Optymalizacja zapytań przy użyciu klucza podstawowego i unikatowych ograniczeń.
Rozwiązuj tablice i mapy w źródle
Pola, miary i łączenia działają na płaskich, skalarnych kolumnach. Jeśli twoje dane źródłowe mają lub zawierają ARRAY kolumny typu lub MAP są w nich kolumny, rozwiąż je do płaskich kolumn w zapytaniu source przed odniesieniem się do nich gdzie indziej w widoku metryki. Istnieją dwie strategie transformacji, w zależności od tego, czy chcesz mieć jeden wiersz na element tablicy, czy jedną wartość na wiersz źródłowy. Oba mają zastosowanie niezależnie od tego, czy tablica znajduje się w obrocie źródłowym na najwyższym poziomie, czy w tabeli, do której się łączy. Zobacz Transform złożonych typów danych dla pełnego zestawu funkcji transformacji.
Żaden zbiór danych w katalogu samples nie ma kolumny tablicy, więc przykłady w tej sekcji używają widoku orders zawierającego tablicę line_items struktur. Użyj poniższego przykładu, aby stworzyć widok z polem będącym tablicą. Zamień catalog.schema katalog i schemat, do którego chcesz pisać. Musisz mieć uprawnienia do tworzenia obiektów w tym schemiacie.
CREATE OR REPLACE VIEW catalog.schema.orders AS
SELECT
o.o_orderkey,
o.o_custkey,
o.o_orderdate,
o.o_orderstatus,
collect_list(named_struct(
'product_id', l.l_partkey,
'quantity', cast(l.l_quantity as int)
)) AS line_items
FROM samples.tpch.orders o
JOIN samples.tpch.lineitem l ON o.o_orderkey = l.l_orderkey
GROUP BY o.o_orderkey, o.o_custkey, o.o_orderdate, o.o_orderstatus;
Spłaszcz tablicę na wiersze
Aby przeanalizować każdy element tablicy jako osobny wiersz, użyj explode() w zapytaniu source do rozpakowania tablicy. Każdy element staje się osobnym wierszem, a pozostałe kolumny wiersza źródłowego powtarzają się dla każdego elementu. Zobacz Exploduj zagnieżdżone elementy z mapy lub tablicy.
Poniższy przykład rozkłada tablicę line_items tak, że każdy element staje się wierszem:
version: 1.1
source: |
SELECT o_orderkey, o_custkey, item.product_id, item.quantity
FROM catalog.schema.orders
LATERAL VIEW explode(line_items) AS item
fields:
- name: Product
expr: product_id
measures:
- name: Total quantity
expr: SUM(quantity)
- name: Line item count
expr: COUNT(1)
Eksplodowanie tablicy w mnoży source wiersze źródłowe, więc agregacja taka jak liczy COUNT(1) elementy tablicy, a nie oryginalne wiersze. Aby również zmierzyć oryginalne wiersze bez rozlewania się, zamodeluj wybuchniętą tabelę jako połączenie one_to_many . Zobacz sprzężenia jeden do wielu.
Zagreguj tablicę do jednej wartości
Aby zredukować tablicę do jednej wartości na wiersz źródłowy bez zmiany liczby wierszy, zastosuj w zapytaniu source funkcję tablicy skalarnej, taką jak aggregate(), array_size(), lub reduce(). Każdy wiersz źródłowy zachowuje swoje ziarno, a obliczona kolumna jest dostępna dla pól i miar.
Poniższy przykład oblicza liczbę elementów i całkowitą ilość tablicy line_items na zamówienie:
version: 1.1
source: |
SELECT o_orderkey, o_custkey,
array_size(line_items) AS item_count,
aggregate(line_items, 0, (acc, x) -> acc + x.quantity) AS total_quantity
FROM catalog.schema.orders
measures:
- name: Total quantity
expr: SUM(total_quantity)
- name: Average items per order
expr: AVG(item_count)
Ponieważ zapytanie źródłowe zmniejsza tablicę zanim widok metryczny ją przetworzy, źródło zachowuje jeden wiersz na każde zamówienie i mierzy agregację między zamówieniami jak zwykle.
Rozwiązuj tablicę w połączonej tabeli
Ta sama zasada dotyczy tabeli, do której chcesz dołączyć, a nie w kodzie najwyższego poziomu. Łączenie działa na płaskich kolumnach, więc rozwiązuje tablicę w podzapytaniu połączonej tabeli source przed połączeniem. Zapisz join source jako zapytanie SQL, które spłaszcza lub agreguje tablicę, a następnie łącz na uzyskanych kolumnach. Zobacz Połączenia w widokach metrycznych.
Poniższy przykład używa customer jako źródła i łączy orders widok z .cardinality: one_to_many Join source agreguje tablicę każdego zamówienia line_items do skalaru total_quantity przed połączeniem, dzięki czemu widok metryki może sumować ją dla każdego klienta bez dublowania wierszy klienta:
version: 1.1
source: samples.tpch.customer
joins:
- name: orders
source: |
SELECT o_orderkey, o_custkey,
aggregate(line_items, 0, (acc, x) -> acc + x.quantity) AS total_quantity
FROM catalog.schema.orders
on: orders.o_custkey = source.c_custkey
cardinality: one_to_many
fields:
- name: Customer name
expr: c_name
measures:
- name: Total quantity
expr: SUM(orders.total_quantity)
- name: Order count
expr: COUNT(orders.o_orderkey)
Aby zamiast tego traktować każdy element tablicy jako osobny wiersz w tablicy połączonej, spłaszcz tablicę z w explode() połączeniu source w ten sam sposób. Zobacz Spłaszcz tablicę na wiersze.
Pola
Pola, nazywane również wymiarami, to kolumny w widoku metryk, których można używać w klauzulach SELECT, WHERE i GROUP BY podczas wykonywania zapytania. Pole może być kolumną kategorii, taką jak region lub stan, albo nieagregowana kolumna liczbowa, taka jak cena lub ilość, którą można agregować w czasie zapytania. Każde wyrażenie pola musi zwracać wartość skalarną. Może odwoływać się do kolumn z danych źródłowych lub pól zdefiniowanych wcześniej w widoku metryki. Każde pole składa się z dwóch składników:
-
name: alias kolumny -
expr: Wyrażenie SQL, które odwołuje się do danych źródłowych lub wcześniej zdefiniowanych pól w widoku metryki
Warning
Pola widoku metryk typu ciąg znaków są zawsze STRING, nawet jeśli kolumna źródłowa ma typ CHAR lub VARCHAR. Ponieważ CHAR(n) wypełnienie spacji jest utracone, porównania mogą zwracać różne wyniki. Na przykład column = 'COLLEGE' odpowiada wartości CHAR(10) w tabeli źródłowej (która jest dopełniona spacjami), ale nie w polu widoku danych.
Środki
Miary to wyrażenia, które generują wyniki bez wstępnie określonego poziomu agregacji. Muszą być wyrażane przy użyciu funkcji agregujących. Aby odwołać się do miary w zapytaniu, użyj MEASURE funkcji . Miary mogą odwoływać się do kolumn bazowych w danych źródłowych, wcześniej zdefiniowanych polach lub wcześniej zdefiniowanych miarach. Każda miara składa się z następujących składników:
-
name: alias miary -
expr: agregujące wyrażenie SQL, które może zawierać funkcje agregujące SQL
W poniższym przykładzie przedstawiono typowe wzorce miar do analizowania danych zamówień i przychodów. W tych przykładach użyto tabeli zamówień TPC-H, która zawiera dane transakcji sprzedaży, w tym ceny zamówień (), identyfikatory klientów (o_totalprice), klucze zamówień (o_custkeyo_orderkey), daty zamówienia (o_orderdate) i poziomy priorytetów (o_orderpriority):
measures:
# Simple count measure
- name: Order Count
expr: COUNT(1)
# Sum aggregation measure
- name: Total Revenue
expr: SUM(o_totalprice)
# Distinct count measure
- name: Unique Customers
expr: COUNT(DISTINCT o_custkey)
# Calculated measure combining multiple aggregations
- name: Average Order Value
expr: SUM(o_totalprice) / COUNT(DISTINCT o_orderkey)
# Filtered measure with WHERE condition
- name: High Priority Order Revenue
expr: SUM(o_totalprice) FILTER (WHERE o_orderpriority = '1-URGENT')
# Measure using a field
- name: Average Revenue per Month
expr: SUM(o_totalprice) / COUNT(DISTINCT DATE_TRUNC('MONTH', o_orderdate))
Zobacz Funkcje agregujące , aby uzyskać listę funkcji agregujących.
Stosowanie filtrów
Filtr dotyczy wszystkich zapytań odwołujących się do widoku metryki. Aby zdefiniować filtr w interfejsie użytkownika, zobacz Krok 3. Definiowanie filtru.
Aby zdefiniować filtr w definicji YAML, napisz wyrażenie logiczne. W poniższym przykładzie przedstawiono typowe wzorce filtrów:
# Single condition
filter: o_orderdate > '2024-01-01'
# Multiple conditions
filter: o_orderdate > '2024-01-01' AND o_orderstatus = 'F'
# IN clause
filter: o_orderstatus IN ('F', 'P') AND o_orderdate >= '2024-01-01'
Praca z sprzężeniami
Widoki metryk obsługują łączenia, aby wzbogacić dane źródłowe o atrybuty z powiązanych tabel. Można modelować schematy gwiazdy (tabela faktów połączona z tabelami wymiarów), schematy śnieżynki (wielopoziomowe połączenia tabel wymiarów) oraz relacje jeden do wielu (rozszerzanie tabeli faktów na podstawie źródła wymiarowego). Aby uzyskać szczegółowe informacje na temat typów sprzężeń, kardynalności, wzorców schematu i ograniczeń, zobacz Sprzężenia w widokach metryk.
Aby zdefiniować sprzężenia w interfejsie użytkownika, zobacz Krok 2: Dodawanie sprzężenia. Aby zdefiniować sprzężenia w definicji YAML, użyj wzorców w poniższych sekcjach.
Note
Połączone tabele nie mogą zawierać ARRAY ani MAP typować kolumn. Aby rozwiązywać tablice lub mapy na płaskie kolumny przed połączeniem, zobacz Resolve arrays and maps in the source.
Modele schematów gwiazdy
W schemacie gwiazdy tabela faktów source łączy się z jedną lub więcej tabel wymiarów przy użyciu LEFT OUTER JOIN. Widoki metryk łączą tabele faktów i wymiarów potrzebne dla określonego zapytania na podstawie wybranych pól i miar.
Określ kolumny łączenia za pomocą klauzuli on (wyrażenie logiczne) lub klauzuli using (wspólne nazwy kolumn). Złączenie musi odpowiadać relacji wiele do jednego. W przypadku relacji wiele do wielu silnik wybiera pierwszy pasujący wiersz z połączonej tabeli wymiarów.
Poniższy przykład łączy (tabelę faktów orders ) z customer (tabelą wymiarów) i uwidacznia atrybuty klienta jako pola. Ustawienie rely.at_most_one_match: true określa, że połączenie jest relacją wiele do jednego (każde zamówienie ma dokładnie jednego klienta), co umożliwia silnikowi optymalizację zapytań filtrujących według pól z dołączonej tabeli.
Warning
Ustaw at_most_one_match: true tylko wtedy, gdy relacja jest typu wiele do jednego. Ta właściwość nie jest weryfikowana w czasie wykonywania. Jeśli sprzężenia generuje fan-out, miary zwracają nieprawidłowe wyniki.
Zobacz Optymalizacja sprzężeń za pomocą rely.
version: 1.1
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
fields:
- name: Customer name
expr: customer.c_name
measures:
- name: Total revenue
expr: SUM(o_totalprice)
Składnia i formatowanie YAML
Definicje widoku metryki są zgodne ze standardową składnią notacji YAML. Aby uzyskać wymaganą składnię i formatowanie, zobacz Dokumentację składni YAML widoku metryk .
Najlepsze rozwiązania
Podczas modelowania widoków metryk użyj następujących wytycznych:
-
Podstawowe miary modelu: najpierw zdefiniuj najprostsze miary (na przykład
SUM(revenue),COUNT(DISTINCT customer_id)). Tworzenie złożonych miar przy użyciu możliwości kompilowania. -
Ustandaryzuj wartości pól: użyj przekształceń (takich jak
CASEinstrukcje), aby przekonwertować kody bazy danych na jasne nazwy biznesowe (na przykład przekonwertować stan zamówienia "O" na "Otwarte" i "F" na "Spełnione"). - Zdefiniuj zakres z filtrami: jeśli widok metryki powinien zawierać tylko ukończone zamówienia, zdefiniuj ten filtr w widoku metryki, aby użytkownicy nie mogli przypadkowo uwzględnić niekompletnych danych.
-
Użyj jasnego nazewnictwa: nazwy metryk powinny być rozpoznawalne dla użytkowników biznesowych (na przykład "Wartość okresu istnienia klienta" zamiast
cltv_agg_measure). - Oddzielne pola czasu: uwzględnij szczegółowe pola czasu (takie jak "Data zamówienia") i obcięte pola czasu (takie jak "Miesiąc zamówienia" lub "Tydzień zamówienia"), aby włączyć zarówno szczegółowe analizy na poziomie szczegółowości, jak i analizy trendów.
Dodatkowe zasoby
- Złączenia w widokach metryk
- Zaawansowane techniki widoków metryk
- Metadane agenta w widokach metryk
- Materializacja widoków metryk
- Dokumentacja składni YAML dla widoku metryk