Delta-tábla elvetése vagy cseréje
Az Azure Databricks támogatja az SQL standard DDL-parancsait a Unity Catalogban vagy a Hive-metaadattárban regisztrált táblák eltávolításához és cseréjéhez. Ez a cikk példákat tartalmaz a Delta-táblák elvetéséről és cseréjéről, valamint a szintaxisra vonatkozó javaslatokról a konfigurált környezettől és a kívánt eredménytől függően.
Mikor kell elvetni egy táblát?
DROP TABLE
Ha véglegesen törölni szeretné a táblát, és nem kíván új táblát létrehozni ugyanazon a helyen, akkor célszerű eltávolítania egy táblát a metaadattárból. Példa:
DROP TABLE table_name
DROP TABLE
különböző szemantikával rendelkezik a tábla típusától és attól függően, hogy a tábla regisztrálva van-e a Unity Catalogban vagy az örökölt Hive-metaadattárban.
Táblatípus | Metaadattár | Működés |
---|---|---|
Felügyelt | Unity Catalog | A rendszer eltávolítja a táblát a metaadattárból, és a mögöttes adatok törlésre vannak megjelölve. A Unity Catalog által felügyelt táblákban 7 napig lehet UNDROP adatokat kezelni. |
Felügyelt | Hive | A rendszer eltávolítja a táblát a metaadattárból, és a mögöttes adatok törlődnek. |
Külső | Unity Catalog | A rendszer eltávolítja a táblát a metaadattárból, de a mögöttes adatok megmaradnak. Az URI hozzáférési jogosultságait mostantól az adatokat tartalmazó külső hely szabályozza. |
Külső | Hive | A rendszer eltávolítja a táblát a metaadattárból, de a mögöttes adatok megmaradnak. Az URI hozzáférési jogosultságai nem változnak. |
DROP TABLE
a szemantikák különböznek a táblázattípusoktól, a Unity Catalog pedig egy belső táblaazonosító használatával tartja fenn a Delta-táblák előzményeit. Azonban minden tábla közös eredménye, hogy a művelet befejezése után a korábban regisztrált táblanév már nem rendelkezik aktív hivatkozásokkal a metaadattárból származó adatokhoz és táblaelőzményekhez.
Lásd: DROP TABLE.
Feljegyzés
A Databricks nem javasolja a tábla elvetésének és újrakészítésének mintáját az éles folyamatok vagy rendszerek azonos nevével, mivel ez a minta váratlan eredményeket eredményezhet az egyidejű műveletek esetében. Lásd: Adatok cseréje egyidejű műveletekre.
Mikor kell lecserélni egy táblát?
A Databricks utasítások használatát CREATE OR REPLACE TABLE
javasolja olyan használati esetekhez, amikor teljesen felülírni szeretné a céltáblát új adatokkal. Ha például egy Delta-táblát szeretne felülírni egy Parquet-címtár összes adatával, futtassa a következő parancsot:
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
CREATE OR REPLACE TABLE
a használt táblatípustól vagy metaadattártól függetlenül ugyanazokkal a szemantikával rendelkezik. Az alábbiak a következők fontos előnyei CREATE OR REPLACE TABLE
:
- A rendszer lecseréli a táblázat tartalmát, de a tábla identitása megmarad.
- A táblaelőzmények megmaradnak, és a paranccsal visszaállíthatja a táblát egy korábbi verzióra
RESTORE
. - A művelet egyetlen tranzakció, ezért soha nincs olyan időpont, amikor a tábla nem létezik.
- A táblából beolvasott egyidejű lekérdezések megszakítás nélkül folytathatók. Mivel a csere előtti és utáni verzió továbbra is szerepel a táblaelőzményekben, az egyidejű lekérdezések szükség esetén hivatkozhatnak a tábla bármelyik verziójára.
Lásd: CREATE TABLE [USING].
Adatok cseréje egyidejű műveletekre
Ha olyan táblában szeretné elvégezni az adatok teljes cseréjét, amely egyidejű műveletekben is használható, akkor a következőt kell használnia CREATE OR REPLACE TABLE
:
A következő antimintát nem szabad használni:
-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;
A javaslat okai attól függően változnak, hogy felügyelt vagy külső táblákat használ-e, és hogy a Unity Katalógust használja-e, de a mintát használó összes Delta-táblatípus hibát, elvetett rekordokat vagy sérült eredményeket eredményezhet.
Ehelyett a Databricks azt javasolja, hogy mindig használja CREATE OR REPLACE TABLE
a következő példához hasonlóan:
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
Mivel a táblaelőzmények az atomi adatok cseréje során is megmaradnak, az egyidejű tranzakciók ellenőrizhetik a hivatkozott forrástábla verzióját, ezért sikertelenek vagy össze tudják egyeztetni az egyidejű tranzakciókat, ha szükséges, váratlan viselkedés vagy eredmények nélkül.