Odnajdywanie partycji dla tabel zewnętrznych
W tym artykule opisano domyślną strategię odnajdywania partycji dla tabel zewnętrznych wykazu aparatu Unity oraz opcjonalne ustawienie umożliwiające włączenie dziennika metadanych partycji, który sprawia, że odnajdywanie partycji jest spójne z magazynem metadanych Hive.
Usługa Databricks zaleca włączenie rejestrowania metadanych partycji w celu zwiększenia szybkości odczytu i wydajności zapytań dla tabel zewnętrznych wykazu aparatu Unity z partycjami.
Jaka jest domyślna strategia odnajdywania partycji dla wykazu aparatu Unity?
Domyślnie wykaz aparatu Unity rekursywnie wyświetla wszystkie katalogi w lokalizacji tabeli, aby automatycznie odnajdywać partycje. W przypadku dużych tabel z wieloma katalogami partycji może to zwiększyć opóźnienie dla wielu operacji tabeli.
Korzystanie z rejestrowania metadanych partycji
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
W środowisku Databricks Runtime 13.3 LTS i nowszym można opcjonalnie włączyć rejestrowanie metadanych partycji, czyli strategię odnajdywania partycji dla tabel zewnętrznych zarejestrowanych w wykazie aparatu Unity. To zachowanie jest zgodne ze strategią odnajdywania partycji używaną w magazynie metadanych Hive. To zachowanie ma wpływ tylko na tabele zewnętrzne wykazu unity, które mają partycje i używają plików Parquet, ORC, CSV lub JSON. Usługa Databricks zaleca włączenie nowego zachowania w celu zwiększenia szybkości odczytu i wydajności zapytań dla tych tabel.
Ważne
Tabele z włączonym rejestrowaniem metadanych partycji pokazują zmianę zachowania na potrzeby odnajdywania partycji. Zamiast automatycznie skanować lokalizację tabeli dla partycji, wykaz aparatu Unity uwzględnia tylko partycje zarejestrowane w metadanych partycji. Zobacz Ręczne dodawanie, usuwanie lub naprawianie metadanych partycji.
To zachowanie stanie się ustawieniem domyślnym w przyszłej wersji środowiska Databricks Runtime. Tabele z włączoną tą funkcją można odczytywać lub zapisywać tylko przy użyciu środowiska Databricks Runtime 13.3 LTS lub nowszego.
Uwaga
Aby potwierdzić, że nie używa nowego zachowania dziennika partycji, musisz spróbować wykonać zapytanie dotyczące tabeli przy użyciu środowiska Databricks Runtime 12.2 LTS lub nowszego.
Włączanie rejestrowania metadanych partycji
Aby włączyć rejestrowanie metadanych partycji w tabeli, należy włączyć ograniczenie platformy Spark dla bieżącej usługi SparkSession, a następnie utworzyć tabelę zewnętrzną. To ustawienie jest wymagane tylko w usłudze SparkSession, która tworzy tabelę. Po utworzeniu tabeli z włączonym rejestrowaniem metadanych partycji to ustawienie będzie utrwalane w ramach metadanych tabeli i używa tej funkcji we wszystkich kolejnych obciążeniach.
Poniższa składnia demonstruje używanie języka SQL do ustawiania conf platformy Spark w notesie. Konfiguracje platformy Spark można również ustawić podczas konfigurowania obliczeń.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Ważne
Tabele odczytu i zapisu można odczytywać i zapisywać tylko z włączonym rejestrowaniem metadanych partycji w środowisku Databricks Runtime 13.3 LTS lub nowszym. Jeśli masz obciążenia uruchamiane w środowisku Databricks Runtime 12.2 LTS lub nowszym, które muszą współdziałać z tabelami, nie używaj tego ustawienia.
Tabele zewnętrzne nie usuwają bazowych plików danych podczas ich usuwania. Usługa Databricks zaleca używanie CREATE OR REPLACE
składni do uaktualniania tabel w celu korzystania z rejestrowania metadanych partycji, jak w poniższym przykładzie:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Wykaz aparatu Unity wymusza reguły nakładające się na ścieżki dla tabel i woluminów. Nie można zarejestrować nowej tabeli wykazu aparatu Unity w kolekcji plików danych, jeśli tabela już istnieje w tej lokalizacji.
Praca z tabelami z metadanymi partycji
Usługa Databricks zaleca używanie nazw tabel we wszystkich odczytach i zapisach we wszystkich tabelach zarejestrowanych w wykazie aparatu Unity. W przypadku tabel z metadanymi partycji gwarantuje to, że nowe partycje dodane do tabeli są rejestrowane w wykazie aparatu Unity i że zapytania względem tabeli odczytują wszystkie zarejestrowane partycje.
Użycie wzorców opartych na ścieżkach dla odczytów lub zapisów może spowodować ignorowanie partycji lub ich niezarejestrowanie w magazynie metadanych wykazu aparatu Unity. Zobacz Ograniczenia.
Wyświetlanie listy partycji
Użyj następującego polecenia, aby wyświetlić wszystkie partycje zarejestrowane w wykazie aparatu Unity jako metadane partycji:
SHOW PARTITIONS <table-name>
Aby sprawdzić, czy jedna partycja jest zarejestrowana w katalogu aparatu Unity, użyj następującego polecenia:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Ręczne dodawanie, usuwanie lub naprawianie metadanych partycji
Wykaz aparatu Unity wymaga, aby wszystkie partycje dla tabel zewnętrznych znajdowały się w katalogu zarejestrowanym przy użyciu LOCATION
klauzuli podczas rejestracji tabeli.
Po włączeniu metadanych partycji automatyczne odnajdywanie partycji w lokalizacji tabeli jest wyłączone. Jeśli systemy zewnętrzne zapisują dane w lokalizacji tabeli lub używasz zapisów opartych na ścieżkach do dodawania lub zastępowania rekordów w tabeli, należy ręcznie naprawić metadane partycji.
Usługa Azure Databricks używa partycjonowania w stylu hive do przechowywania tabel wspieranych przez format Parquet, ORC, CSV i JSON. Partycje w stylu hive zawierają pary klucz-wartość połączone przez znak równości w katalogu partycji, na przykład year=2021/month=01/
.
Jeśli tabela używa partycjonowania w stylu hive, można użyć MSCK REPAIR
do synchronizacji metadanych partycji w wykazie aparatu Unity z partycjami, które istnieją w lokalizacji tabeli. W poniższych przykładach składni przedstawiono typowe operacje:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Zobacz NAPRAWIANIE TABELI.
Ręczne określanie ścieżek dla innych typów partycji
Jeśli tabela nie używa partycjonowania w stylu hive, należy ręcznie określić lokalizacje partycji podczas dodawania partycji. Ręczne określanie partycji może również zmniejszyć opóźnienie w porównaniu ze MSCK REPAIR
składnią, szczególnie w przypadku tabel z dużą liczbą partycji. Poniższy przykład składni pokazuje dodawanie partycji:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Składnia umożliwia również ALTER TABLE
usuwanie, zmienianie nazwy, odzyskiwanie i ustawianie lokalizacji partycji. Zobacz ALTER TABLE ... PARTYCJA.
Wyłączanie nowych metadanych partycji
Platforma Spark conf określa, czy nowe tabele używają metadanych partycji, są domyślnie wyłączone. Możesz również jawnie wyłączyć to zachowanie. Poniższa składnia używa języka SQL do wyłączenia conf platformy Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Określa to tylko, czy tabele utworzone w usłudze SparkSession używają metadanych partycji. Aby wyłączyć metadane partycji w tabeli korzystającej z zachowania, należy usunąć i ponownie utworzyć tabelę w usłudze SparkSession, która nie ma włączonego ograniczenia platformy Spark.
Uwaga
Chociaż nie można odczytywać ani zapisywać w tabelach z włączonymi metadanymi partycji w środowisku Databricks Runtime 12.2 LTS lub nowszym, można uruchomić DROP
instrukcje lub CREATE OR REPLACE TABLE
względem tych tabel, jeśli masz wystarczające uprawnienia w wykazie aparatu Unity.
Ograniczenia
Istnieją następujące ograniczenia:
- Nie można odczytywać ani zapisywać w tabelach z włączonymi metadanymi partycji przy użyciu środowiska Databricks Runtime 12.2 LTS lub nowszego.
- Odczytywanie tabeli przy użyciu ścieżki katalogu zwraca wszystkie partycje, w tym wszystkie partycje, które zostały ręcznie dodane lub usunięte.
- W przypadku wstawiania lub zastępowania rekordów w tabeli przy użyciu ścieżki zamiast nazwy tabeli metadane partycji nie są rejestrowane.
- Format pliku Avro nie jest obsługiwany.