Dokumentacja języka Python w tabelach delta Live Tables
Ten artykuł zawiera szczegółowe informacje dotyczące interfejsu programowania Delta Live Tables w języku Python.
Aby uzyskać informacje na temat interfejsu API SQL, zobacz dokumentację języka SQL delta Live Tables.
Aby uzyskać szczegółowe informacje dotyczące konfigurowania automatycznego modułu ładującego, zobacz Co to jest moduł automatycznego ładowania?.
Przed rozpoczęciem
Poniżej przedstawiono ważne zagadnienia dotyczące implementowania potoków za pomocą interfejsu języka Python delta Live Tables:
- Ponieważ język Python
table()
iview()
funkcje są wywoływane wielokrotnie podczas planowania i uruchamiania aktualizacji potoku, nie dołączaj kodu do jednej z tych funkcji, które mogą mieć skutki uboczne (na przykład kod modyfikujący dane lub wysyłający wiadomość e-mail). Aby uniknąć nieoczekiwanego zachowania, funkcje języka Python definiujące zestawy danych powinny zawierać tylko kod wymagany do zdefiniowania tabeli lub widoku. - Aby wykonywać operacje, takie jak wysyłanie wiadomości e-mail lub integrowanie z zewnętrzną usługą monitorowania, szczególnie w funkcjach definiujących zestawy danych, użyj punktów zaczepienia zdarzeń. Zaimplementowanie tych operacji w funkcjach definiujących zestawy danych spowoduje nieoczekiwane zachowanie.
- Język Python
table
iview
funkcje muszą zwracać ramkę danych. Niektóre funkcje działające na ramkach danych nie zwracają ramek danych i nie powinny być używane. Te operacje obejmują funkcje, takie jakcollect()
, ,count()
toPandas()
,save()
isaveAsTable()
. Ponieważ przekształcenia ramki danych są wykonywane po rozwiązaniu pełnego grafu przepływu danych, użycie takich operacji może mieć niezamierzone skutki uboczne. Można jednak uwzględnić te funkcje pozatable
definicjami funkcji lubview
, ponieważ ten kod jest uruchamiany raz w fazie inicjowania grafu.
Importowanie modułu dlt
języka Python
Funkcje języka Python w tabelach na żywo funkcji delta są definiowane w dlt
module. Potoki zaimplementowane za pomocą interfejsu API języka Python muszą zaimportować ten moduł:
import dlt
Tworzenie tabel delta live zmaterializowanego widoku lub tabeli przesyłania strumieniowego
W języku Python funkcja Delta Live Tables określa, czy zestaw danych ma być aktualizowany jako zmaterializowany widok, czy tabela przesyłania strumieniowego na podstawie definiującego zapytania. Dekorator @table
służy do definiowania zarówno zmaterializowanych widoków, jak i tabel przesyłania strumieniowego.
Aby zdefiniować zmaterializowany widok w języku Python, zastosuj do @table
zapytania, które wykonuje statyczny odczyt względem źródła danych. Aby zdefiniować tabelę przesyłania strumieniowego, zastosuj do @table
zapytania, które wykonuje odczyt strumieniowy względem źródła danych. Oba typy zestawów danych mają tę samą specyfikację składni w następujący sposób:
import dlt
@dlt.table(
name="<name>",
comment="<comment>",
spark_conf={"<key>" : "<value>", "<key>" : "<value>"},
table_properties={"<key>" : "<value>", "<key>" : "<value>"},
path="<storage-location-path>",
partition_cols=["<partition-column>", "<partition-column>"],
schema="schema-definition",
temporary=False)
@dlt.expect
@dlt.expect_or_fail
@dlt.expect_or_drop
@dlt.expect_all
@dlt.expect_all_or_drop
@dlt.expect_all_or_fail
def <function-name>():
return (<query>)
Tworzenie widoku tabel na żywo delty
Aby zdefiniować widok w języku Python, zastosuj @view
dekorator. @table
Podobnie jak dekorator, można użyć widoków w tabelach delta live dla zestawów danych statycznych lub przesyłanych strumieniowo. Poniżej przedstawiono składnię definiującą widoki przy użyciu języka Python:
import dlt
@dlt.view(
name="<name>",
comment="<comment>")
@dlt.expect
@dlt.expect_or_fail
@dlt.expect_or_drop
@dlt.expect_all
@dlt.expect_all_or_drop
@dlt.expect_all_or_fail
def <function-name>():
return (<query>)
Przykład: Definiowanie tabel i widoków
Aby zdefiniować tabelę lub widok w języku Python, zastosuj @dlt.view
funkcję lub @dlt.table
dekorator. Możesz użyć nazwy funkcji lub parametru name
, aby przypisać tabelę lub nazwę widoku. W poniższym przykładzie zdefiniowano dwa różne zestawy danych: widok o nazwie taxi_raw
, który przyjmuje plik JSON jako źródło wejściowe i tabelę o nazwie filtered_data
, która przyjmuje taxi_raw
widok jako dane wejściowe:
import dlt
@dlt.view
def taxi_raw():
return spark.read.format("json").load("/databricks-datasets/nyctaxi/sample/json/")
# Use the function name as the table name
@dlt.table
def filtered_data():
return dlt.read("taxi_raw").where(...)
# Use the name parameter as the table name
@dlt.table(
name="filtered_data")
def create_filtered_data():
return dlt.read("taxi_raw").where(...)
Przykład: uzyskiwanie dostępu do zestawu danych zdefiniowanego w tym samym potoku
Oprócz odczytywania z zewnętrznych źródeł danych można uzyskać dostęp do zestawów danych zdefiniowanych w tym samym potoku za pomocą funkcji Delta Live Tables read()
. W poniższym przykładzie pokazano tworzenie customers_filtered
zestawu danych przy użyciu read()
funkcji :
@dlt.table
def customers_raw():
return spark.read.format("csv").load("/data/customers.csv")
@dlt.table
def customers_filteredA():
return dlt.read("customers_raw").where(...)
Możesz również użyć spark.table()
funkcji , aby uzyskać dostęp do zestawu danych zdefiniowanego w tym samym potoku. W przypadku uzyskiwania spark.table()
dostępu do zestawu danych zdefiniowanego w potoku przy użyciu funkcji argument funkcji poprzedzał LIVE
słowo kluczowe nazwą zestawu danych:
@dlt.table
def customers_raw():
return spark.read.format("csv").load("/data/customers.csv")
@dlt.table
def customers_filteredB():
return spark.table("LIVE.customers_raw").where(...)
Przykład: odczyt z tabeli zarejestrowanej w magazynie metadanych
Aby odczytać dane z tabeli zarejestrowanej w magazynie metadanych Programu Hive, w argumencie funkcji pominięto LIVE
słowo kluczowe i opcjonalnie zakwalifikuj nazwę tabeli o nazwie bazy danych:
@dlt.table
def customers():
return spark.table("sales.customers").where(...)
Aby zapoznać się z przykładem odczytu z tabeli wykazu aparatu Unity, zobacz Pozyskiwanie danych do potoku wykazu aparatu Unity.
Przykład: uzyskiwanie dostępu do zestawu danych przy użyciu spark.sql
Zestaw danych można również zwrócić przy użyciu spark.sql
wyrażenia w funkcji zapytania. Aby odczytać z wewnętrznego zestawu danych, należy LIVE.
wstępnie otworzyć nazwę zestawu danych:
@dlt.table
def chicago_customers():
return spark.sql("SELECT * FROM LIVE.customers_cleaned WHERE city = 'Chicago'")
Tworzenie tabeli, która ma być używana jako element docelowy operacji przesyłania strumieniowego
create_streaming_table()
Użyj funkcji , aby utworzyć tabelę docelową dla rekordów wyjściowych przez operacje przesyłania strumieniowego, w tym apply_changes() i rekordy wyjściowe @append_flow.
Uwaga
Funkcje create_target_table()
i create_streaming_live_table()
są przestarzałe. Usługa Databricks zaleca aktualizowanie istniejącego create_streaming_table()
kodu w celu korzystania z funkcji.
create_streaming_table(
name = "<table-name>",
comment = "<comment>"
spark_conf={"<key>" : "<value", "<key" : "<value>"},
table_properties={"<key>" : "<value>", "<key>" : "<value>"},
partition_cols=["<partition-column>", "<partition-column>"],
path="<storage-location-path>",
schema="schema-definition",
expect_all = {"<key>" : "<value", "<key" : "<value>"},
expect_all_or_drop = {"<key>" : "<value", "<key" : "<value>"},
expect_all_or_fail = {"<key>" : "<value", "<key" : "<value>"}
)
Argumenty |
---|
name Typ: str Nazwa tabeli. Ten parametr jest wymagany. |
comment Typ: str Opcjonalny opis tabeli. |
spark_conf Typ: dict Opcjonalna lista konfiguracji platformy Spark na potrzeby wykonywania tego zapytania. |
table_properties Typ: dict Opcjonalna lista właściwości tabeli. |
partition_cols Typ: array Opcjonalna lista co najmniej jednej kolumny używanej do partycjonowania tabeli. |
path Typ: str Opcjonalna lokalizacja przechowywania danych tabeli. Jeśli nie zostanie ustawiona, system będzie domyślnie ustawiony na lokalizację przechowywania potoku. |
schema Typ: str lub StructType Opcjonalna definicja schematu dla tabeli. Schematy można zdefiniować jako ciąg DDL SQL lub za pomocą języka Python StructType . |
expect_all expect_all_or_drop expect_all_or_fail Typ: dict Opcjonalne ograniczenia dotyczące jakości danych dla tabeli. Zobacz wiele oczekiwań. |
Kontrolowanie sposobu materializacji tabel
Tabele oferują również dodatkową kontrolę nad ich materializacją:
- Określ sposób partycjonowania tabel przy użyciu polecenia
partition_cols
. Możesz użyć partycjonowania, aby przyspieszyć wykonywanie zapytań. - Właściwości tabeli można ustawić podczas definiowania widoku lub tabeli. Zobacz Właściwości tabeli Tabele na żywo funkcji Delta.
- Ustaw lokalizację przechowywania danych tabeli przy użyciu
path
ustawienia . Domyślnie dane tabeli są przechowywane w lokalizacji magazynu potoku, jeślipath
nie są ustawione. - W definicji schematu można użyć wygenerowanych kolumn . Zobacz Przykład: określanie schematu i kolumn partycji.
Uwaga
W przypadku tabel o rozmiarze mniejszym niż 1 TB usługa Databricks zaleca umożliwienie usłudze Delta Live Tables kontrolowania organizacji danych. Jeśli nie spodziewasz się, że tabela przekroczy terabajt, zazwyczaj nie należy określać kolumn partycji.
Przykład: określanie schematu i kolumn partycji
Opcjonalnie można określić schemat tabeli przy użyciu języka Python StructType
lub ciągu DDL SQL. Po określeniu ciągu DDL definicja może zawierać wygenerowane kolumny.
Poniższy przykład tworzy tabelę o nazwie sales
ze schematem określonym przy użyciu języka Python StructType
:
sales_schema = StructType([
StructField("customer_id", StringType(), True),
StructField("customer_name", StringType(), True),
StructField("number_of_line_items", StringType(), True),
StructField("order_datetime", StringType(), True),
StructField("order_number", LongType(), True)]
)
@dlt.table(
comment="Raw data on sales",
schema=sales_schema)
def sales():
return ("...")
Poniższy przykład określa schemat tabeli przy użyciu ciągu DDL, definiuje wygenerowaną kolumnę i definiuje kolumnę partycji:
@dlt.table(
comment="Raw data on sales",
schema="""
customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
""",
partition_cols = ["order_day_of_week"])
def sales():
return ("...")
Domyślnie tabele na żywo delty wywnioskują schemat z table
definicji, jeśli nie określisz schematu.
Konfigurowanie tabeli przesyłania strumieniowego w celu ignorowania zmian w źródłowej tabeli przesyłania strumieniowego
Uwaga
- Flaga
skipChangeCommits
działa tylko zspark.readStream
użyciemoption()
funkcji. Nie można użyć tej flagi wdlt.read_stream()
funkcji. - Nie można użyć flagi
skipChangeCommits
, gdy źródłowa tabela przesyłania strumieniowego jest zdefiniowana jako element docelowy funkcji apply_changes().
Domyślnie tabele przesyłania strumieniowego wymagają źródeł tylko do dołączania. Gdy tabela przesyłania strumieniowego używa innej tabeli przesyłania strumieniowego jako źródła, a źródłowa tabela przesyłania strumieniowego wymaga aktualizacji lub usunięcia, na przykład przetwarzania RODO "prawo do zapomnienia" skipChangeCommits
można ustawić flagę podczas odczytywania źródłowej tabeli przesyłania strumieniowego w celu zignorowania tych zmian. Aby uzyskać więcej informacji na temat tej flagi, zobacz Ignorowanie aktualizacji i usuwania.
@table
def b():
return spark.readStream.option("skipChangeCommits", "true").table("LIVE.A")
Właściwości tabel delta live języka Python
W poniższych tabelach opisano opcje i właściwości, które można określić podczas definiowania tabel i widoków za pomocą tabel różnicowych na żywo:
@table lub @view |
---|
name Typ: str Opcjonalna nazwa tabeli lub widoku. Jeśli nie jest zdefiniowana, nazwa funkcji jest używana jako nazwa tabeli lub widoku. |
comment Typ: str Opcjonalny opis tabeli. |
spark_conf Typ: dict Opcjonalna lista konfiguracji platformy Spark na potrzeby wykonywania tego zapytania. |
table_properties Typ: dict Opcjonalna lista właściwości tabeli. |
path Typ: str Opcjonalna lokalizacja przechowywania danych tabeli. Jeśli nie zostanie ustawiona, system będzie domyślnie ustawiony na lokalizację przechowywania potoku. |
partition_cols Typ: a collection of str Opcjonalna kolekcja, na przykład , list z co najmniej jednej kolumny do użycia na potrzeby partycjonowania tabeli. |
schema Typ: str lub StructType Opcjonalna definicja schematu dla tabeli. Schematy można zdefiniować jako ciąg DDL SQL lub za pomocą języka Python StructType . |
temporary Typ: bool Utwórz tabelę, ale nie publikuj metadanych dla tabeli. Słowo temporary kluczowe instruuje tabele delta Live Tables, aby utworzyć tabelę dostępną dla potoku, ale nie należy uzyskiwać dostępu poza potokiem. Aby skrócić czas przetwarzania, tabela tymczasowa utrzymuje się przez okres istnienia potoku, który go tworzy, a nie tylko pojedynczą aktualizację.Wartość domyślna to "False". |
Definicja tabeli lub widoku |
---|
def <function-name>() Funkcja języka Python, która definiuje zestaw danych. name Jeśli parametr nie jest ustawiony, <function-name> zostanie użyty jako nazwa docelowego zestawu danych. |
query Instrukcja Spark SQL zwracająca zestaw danych Platformy Spark lub ramkę danych Koalas. Użyj dlt.read() polecenia lub spark.table() , aby wykonać pełny odczyt z zestawu danych zdefiniowanego w tym samym potoku. W przypadku używania spark.table() funkcji do odczytu z zestawu danych zdefiniowanego w tym samym potoku, wstępnego przy użyciu LIVE słowa kluczowego do nazwy zestawu danych w argumencie funkcji. Aby na przykład odczytać z zestawu danych o nazwie customers :spark.table("LIVE.customers") Możesz również użyć spark.table() funkcji do odczytu z tabeli zarejestrowanej w magazynie metadanych, pomijając LIVE słowo kluczowe i opcjonalnie kwalifikując nazwę tabeli o nazwie bazy danych:spark.table("sales.customers") Służy dlt.read_stream() do wykonywania przesyłania strumieniowego odczytanego z zestawu danych zdefiniowanego w tym samym potoku.spark.sql Użyj funkcji , aby zdefiniować zapytanie SQL w celu utworzenia zwracanego zestawu danych.Użyj składni PySpark , aby zdefiniować zapytania delta live tables z językiem Python. |
Oczekiwania |
---|
@expect("description", "constraint") Deklarowanie ograniczenia jakości danych zidentyfikowanego przez description . Jeśli wiersz narusza oczekiwania, uwzględnij wiersz w docelowym zestawie danych. |
@expect_or_drop("description", "constraint") Deklarowanie ograniczenia jakości danych zidentyfikowanego przez description . Jeśli wiersz narusza oczekiwania, upuść wiersz z docelowego zestawu danych. |
@expect_or_fail("description", "constraint") Deklarowanie ograniczenia jakości danych zidentyfikowanego przez description . Jeśli wiersz narusza oczekiwania, natychmiast zatrzymaj wykonywanie. |
@expect_all(expectations) Zadeklaruj co najmniej jedno ograniczenie dotyczące jakości danych. expectations to słownik języka Python, w którym klucz jest opisem oczekiwania, a wartość jest ograniczeniem oczekiwania. Jeśli wiersz narusza jakiekolwiek oczekiwania, uwzględnij wiersz w docelowym zestawie danych. |
@expect_all_or_drop(expectations) Zadeklaruj co najmniej jedno ograniczenie dotyczące jakości danych. expectations to słownik języka Python, w którym klucz jest opisem oczekiwania, a wartość jest ograniczeniem oczekiwania. Jeśli wiersz narusza jakiekolwiek oczekiwania, upuść wiersz z docelowego zestawu danych. |
@expect_all_or_fail(expectations) Zadeklaruj co najmniej jedno ograniczenie dotyczące jakości danych. expectations to słownik języka Python, w którym klucz jest opisem oczekiwania, a wartość jest ograniczeniem oczekiwania. Jeśli wiersz narusza jakiekolwiek oczekiwania, natychmiast zatrzymaj wykonywanie. |
Zmienianie przechwytywania danych przy użyciu języka Python w tabelach delta live
apply_changes()
Użyj funkcji w interfejsie API języka Python, aby użyć funkcji delta Live Tables CDC. Interfejs języka Python delta Live Tables udostępnia również funkcję create_streaming_table(). Za pomocą tej funkcji można utworzyć tabelę docelową wymaganą apply_changes()
przez funkcję.
apply_changes(
target = "<target-table>",
source = "<data-source>",
keys = ["key1", "key2", "keyN"],
sequence_by = "<sequence-column>",
ignore_null_updates = False,
apply_as_deletes = None,
apply_as_truncates = None,
column_list = None,
except_column_list = None,
stored_as_scd_type = <type>,
track_history_column_list = None,
track_history_except_column_list = None
)
Uwaga
Domyślne zachowanie dla INSERT
zdarzeń i UPDATE
dotyczy upsert zdarzeń CDC ze źródła: zaktualizować wszystkie wiersze w tabeli docelowej, które są zgodne z określonymi kluczami lub wstawić nowy wiersz, gdy pasujący rekord nie istnieje w tabeli docelowej. Obsługę zdarzeń DELETE
można określić za pomocą APPLY AS DELETE WHEN
warunku.
Ważne
Aby zastosować zmiany, należy zadeklarować docelową tabelę przesyłania strumieniowego. Opcjonalnie możesz określić schemat tabeli docelowej. Podczas określania schematu apply_changes
tabeli docelowej należy również uwzględnić __START_AT
kolumny i __END_AT
o tym samym typie sequence_by
danych co pole.
Zobacz Stosowanie zmian interfejsu API: upraszczanie przechwytywania danych zmian w tabelach delta live.
Argumenty |
---|
target Typ: str Nazwa tabeli do zaktualizowania. Za pomocą funkcji create_streaming_table() można utworzyć tabelę docelową przed wykonaniem apply_changes() funkcji.Ten parametr jest wymagany. |
source Typ: str Źródło danych zawierające rekordy CDC. Ten parametr jest wymagany. |
keys Typ: list Kolumna lub kombinacja kolumn, które jednoznacznie identyfikują wiersz w danych źródłowych. Służy do identyfikowania, które zdarzenia CDC mają zastosowanie do określonych rekordów w tabeli docelowej. Możesz określić jedną z następujących opcji: * Lista ciągów: ["userId", "orderId"] * Lista funkcji Spark SQL col() : [col("userId"), col("orderId"] Argumenty funkcji nie mogą zawierać col() kwalifikatorów. Można na przykład użyć elementu col(userId) , ale nie można użyć polecenia col(source.userId) .Ten parametr jest wymagany. |
sequence_by Typ: str lub col() Nazwa kolumny określająca kolejność logiczną zdarzeń CDC w danych źródłowych. Funkcja Delta Live Tables używa tej sekwencjonowania w celu obsługi zdarzeń zmiany, które docierają poza kolejność. Możesz określić jedną z następujących opcji: * Ciąg: "sequenceNum" * Funkcja Spark SQL col() : col("sequenceNum") Argumenty funkcji nie mogą zawierać col() kwalifikatorów. Można na przykład użyć elementu col(userId) , ale nie można użyć polecenia col(source.userId) .Ten parametr jest wymagany. |
ignore_null_updates Typ: bool Zezwalaj na pozyskiwanie aktualizacji zawierających podzestaw kolumn docelowych. Gdy zdarzenie CDC pasuje do istniejącego wiersza i ignore_null_updates ma True wartość , kolumny z wartością null zachowają istniejące wartości w obiekcie docelowym. Dotyczy to również zagnieżdżonych kolumn z wartością null . Gdy ignore_null_updates wartość to False , istniejące wartości zostaną zastąpione wartościami null .Ten parametr jest opcjonalny. Wartość domyślna to False . |
apply_as_deletes Typ: str lub expr() Określa, kiedy zdarzenie CDC powinno być traktowane jako DELETE a nie upsert. Aby obsłużyć dane poza kolejnością, usunięty wiersz jest tymczasowo zachowywany jako grób w bazowej tabeli delty, a widok jest tworzony w magazynie metadanych, który filtruje te grobowce. Interwał przechowywania można skonfigurować za pomocą poleceniapipelines.cdc.tombstoneGCThresholdInSeconds właściwość tabeli.Możesz określić jedną z następujących opcji: * Ciąg: "Operation = 'DELETE'" * Funkcja Spark SQL expr() : expr("Operation = 'DELETE'") Ten parametr jest opcjonalny. |
apply_as_truncates Typ: str lub expr() Określa, kiedy zdarzenie CDC powinno być traktowane jako pełna tabela TRUNCATE . Ponieważ ta klauzula wyzwala pełny obcięcie tabeli docelowej, powinna być używana tylko w określonych przypadkach użycia wymagających tej funkcji.Parametr apply_as_truncates jest obsługiwany tylko dla typu SCD 1. Typ SCD 2 nie obsługuje obcinania.Możesz określić jedną z następujących opcji: * Ciąg: "Operation = 'TRUNCATE'" * Funkcja Spark SQL expr() : expr("Operation = 'TRUNCATE'") Ten parametr jest opcjonalny. |
column_list except_column_list Typ: list Podzbiór kolumn do uwzględnienia w tabeli docelowej. Użyj column_list polecenia , aby określić pełną listę kolumn do uwzględnienia. Użyj except_column_list polecenia , aby określić kolumny do wykluczenia. Możesz zadeklarować wartość jako listę ciągów lub jako funkcje Spark SQL col() :* column_list = ["userId", "name", "city"] .* column_list = [col("userId"), col("name"), col("city")] * except_column_list = ["operation", "sequenceNum"] * except_column_list = [col("operation"), col("sequenceNum") Argumenty funkcji nie mogą zawierać col() kwalifikatorów. Można na przykład użyć elementu col(userId) , ale nie można użyć polecenia col(source.userId) .Ten parametr jest opcjonalny. Wartością domyślną jest dołączenie wszystkich kolumn do tabeli docelowej, gdy do funkcji nie zostanie przekazany żaden column_list argument lub except_column_list argument. |
stored_as_scd_type Typ: str lub int Określa, czy rekordy mają być przechowywane jako typ SCD 1, czy SCD, 2. Ustaw wartość 1 dla typu SCD 1 lub 2 dla typu SCD 2.Ta klauzula jest opcjonalna. Wartość domyślna to SCD typ 1. |
track_history_column_list track_history_except_column_list Typ: list Podzbiór kolumn wyjściowych do śledzenia historii w tabeli docelowej. Użyj track_history_column_list polecenia , aby określić pełną listę kolumn do śledzenia. Używanietrack_history_except_column_list aby określić kolumny, które mają być wykluczone ze śledzenia. Wartość można zadeklarować jako listę ciągów lub jako funkcje Spark SQL col() : - track_history_column_list = ["userId", "name", "city"] . - track_history_column_list = [col("userId"), col("name"), col("city")] - track_history_except_column_list = ["operation", "sequenceNum"] - track_history_except_column_list = [col("operation"), col("sequenceNum") Argumenty funkcji nie mogą zawierać col() kwalifikatorów. Można na przykład użyć elementu col(userId) , ale nie można użyć polecenia col(source.userId) .Ten parametr jest opcjonalny. Wartością domyślną jest dołączenie wszystkich kolumn do tabeli docelowej, jeśli nie track_history_column_list lubtrack_history_except_column_list argument jest przekazywany do funkcji . |
Ograniczenia
Interfejs delta Live Tables w języku Python ma następujące ograniczenie:
Funkcja nie jest obsługiwana pivot()
. Operacja pivot
na platformie Spark wymaga chętnego ładowania danych wejściowych w celu obliczenia schematu danych wyjściowych. Ta funkcja nie jest obsługiwana w tabelach delta live.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla