DROP CONNECTION (Fremdkatalog)

Gilt für: Ja angekreuzt Databricks SQL Ja angekreuzt Databricks Runtime 17.3 und höher

Von Bedeutung

Dieses Feature befindet sich in der öffentlichen Vorschau und ist derzeit nur für teilnehmende Kunden verfügbar. Um an der Vorschau teilzunehmen, wenden Sie sich an, indem Sie dieses Formular ausfüllen. Dieses Feature unterstützt nur die Trennung der Verbindung für fremde Kataloge mit Hive Metastore (HMS) und Glue Federation.

Verwenden Sie den DROP CONNECTION Befehl, um einen fremden Katalog in einen Standardkatalog im Unity-Katalog zu konvertieren. Nach dem Ablegen der Verbindung synchronisiert der Katalog keine Fremdtabellen mehr aus dem externen Katalog. Stattdessen verhält es sich wie ein Standard-Unity-Katalogkatalog, der verwaltete oder externe Tabellen enthält. Ihr Katalog wird jetzt als Standard und nicht als Fremder im Unity-Katalog bezeichnet. Dieser Befehl wirkt sich nicht auf Tabellen in Ihrem externen Katalog aus. es wirkt sich nur auf Ihren fremden Katalog im Unity-Katalog aus.

Erfordert OWNER oder MANAGE, USE_CATALOGund BROWSE Berechtigungen für den Katalog.

Syntax

ALTER CATALOG catalog_name DROP CONNECTION { RESTRICT | FORCE }

Die Parameter

  • catalog_name

    Der Name des Fremdkatalogs, der in einen Standardkatalog konvertiert werden soll.

  • EINSCHRÄNKEN

    Standardverhalten. DROP CONNECTION mit RESTRICT schlägt fehl beim Konvertieren des fremden Katalogs in einen Standardkatalog, wenn im Katalog Fremdtabellen oder Fremdansichten vorhanden sind.

    Informationen zum Upgrade von Fremdtabellen auf verwaltete oder externe Tabellen im Unity-Katalog finden Sie unter Konvertieren einer Fremdtabelle in eine verwaltete Unity-Katalogtabelle oder Konvertieren einer Fremdtabelle in eine externe Unity-Katalogtabelle. Informationen zum Konvertieren von Fremdansichten finden Sie unter SET VERWALTET (FREMDANSICHT).

  • KRAFT

    DROP CONNECTION mit FORCE löscht alle verbleibenden Fremdtabellen oder Ansichten in einem Fremdkatalog, wenn der Fremdkatalog in einen Standardkatalog konvertiert wird. Mit diesem Befehl werden keine Daten oder Metadaten in Ihrem externen Katalog abgelegt. sie legt nur die Metadaten ab, die mit dem Unity-Katalog synchronisiert wurden, um die Fremdtabelle zu erstellen.

    Warnung

    Sie können diesen Befehl nicht zurücksetzen. Wenn Sie die Fremdtabellen wieder in den Unity-Katalog einbinden möchten, müssen Sie den fremden Katalog neu erstellen.

Examples

-- Convert an existing foreign catalog using default RESTRICT behavior
> ALTER CATALOG hms_federated_catalog DROP CONNECTION;
OK

-- Convert an existing foreign catalog using FORCE to drop foreign tables
> ALTER CATALOG hms_federated_catalog DROP CONNECTION FORCE;
OK

-- RESTRICT fails if foreign tables or views exist
> ALTER CATALOG hms_federated_catalog DROP CONNECTION RESTRICT;
[CATALOG_CONVERSION_FOREIGN_ENTITY_PRESENT] Catalog conversion from UC Foreign to UC Standard failed because catalog contains foreign entities (up to 10 are shown here): <entityNames>. To see the full list of foreign entities in this catalog, please refer to the scripts below.

-- FORCE fails if catalog type isn't supported
> ALTER CATALOG redshift_federated_catalog DROP CONNECTION FORCE;
[CATALOG_CONVERSION_UNSUPPORTED_CATALOG_TYPE] Catalog cannot be converted from UC Foreign to UC Standard. Only HMS and Glue Foreign UC catalogs can be converted to UC Standard.

Skripts zum Überprüfen fremder Tabellen und Ansichten

Hinweis

Bevor Sie DROP CONNECTION RESTRICT verwenden, können Sie mithilfe der Python-Skripten und der Unity Catalog REST-API nach fremden Tabellen und Ansichten in Ihrem Katalog suchen.

Skript zum Auflisten aller fremder Tabellen und Ansichten aus dem Verbundkatalog:

import requests

def list_foreign_uc_tables_and_views(catalog_name, pat_token, workspace_url):
    """
    Lists all foreign tables and views in the specified Unity Catalog.

    Args:
        catalog_name (str): The name of the catalog to search.
        pat_token (str): Personal Access Token for Databricks API authentication.
        workspace_url (str): Databricks workspace hostname (e.g., "https://adb-xxxx.x.azuredatabricks.net").

    Returns:
        list: A list of dictionaries containing information about the foreign tables/views.
    """
    base_url = f"{workspace_url}/api/2.1/unity-catalog"
    headers = {
        "Authorization": f"Bearer {pat_token}",
        "Content-Type": "application/json"
    }

    # Step 1: List all schemas in the catalog (GET request)
    schemas_url = f"{base_url}/schemas"
    schemas_params = {
        "catalog_name": catalog_name,
        "include_browse": "true"
    }

    schemas_resp = requests.get(schemas_url, headers=headers, params=schemas_params)
    schemas_resp.raise_for_status()
    schemas = schemas_resp.json().get("schemas", [])
    schema_names = [schema["name"] for schema in schemas]

    result = []

    # Step 2: For each schema, list all tables/views and filter (GET request)
    for schema_name in schema_names:
        tables_url = f"{base_url}/table-summaries"
        tables_params = {
            "catalog_name": catalog_name,
            "schema_name_pattern": schema_name,
            "include_manifest_capabilities": "true"
        }

        tables_resp = requests.get(tables_url, headers=headers, params=tables_params)
        tables_resp.raise_for_status()
        tables = tables_resp.json().get("tables", [])

        for table in tables:
            # Use OR for filtering as specified
            if (
                table.get("table_type") == "FOREIGN"
                or table.get("securable_kind") in {
                    "TABLE_FOREIGN_HIVE_METASTORE_VIEW",
                    "TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW"
                }
            ):
                result.append(table.get("full_name"))

    return result

# Example usage:
# catalog = "hms_foreign_catalog"
# token = "dapiXXXXXXXXXX"
# workspace = "https://adb-xxxx.x.azuredatabricks.net"
# foreign_tables = list_foreign_uc_tables_and_views(catalog, token, workspace)
# for entry in foreign_tables:
#     print(entry)

Skript zum Auflisten aller Fremdtabellen und Ansichten, die sich im ACTIVE-Bereitstellungsstatus befinden:

import requests

def list_foreign_uc_tables_and_views(catalog_name, pat_token, workspace_url):
    """
    Lists all foreign tables and views in the specified Unity Catalog.

    Args:
        catalog_name (str): The name of the catalog to search.
        pat_token (str): Personal Access Token for Databricks API authentication.
        workspace_url (str): Databricks workspace hostname (e.g., "https://adb-xxxx.x.azuredatabricks.net").

    Returns:
        list: A list of dictionaries containing information about the foreign tables/views.
    """
    base_url = f"{workspace_url}/api/2.1/unity-catalog"
    headers = {
        "Authorization": f"Bearer {pat_token}",
        "Content-Type": "application/json"
    }

    # Step 1: List all schemas in the catalog (GET request)
    schemas_url = f"{base_url}/schemas"
    schemas_params = {
        "catalog_name": catalog_name,
        "include_browse": "true"
    }

    schemas_resp = requests.get(schemas_url, headers=headers, params=schemas_params)
    schemas_resp.raise_for_status()
    schemas = schemas_resp.json().get("schemas", [])
    schema_names = [schema["name"] for schema in schemas]

    result = []

    # Step 2: For each schema, list all tables/views and filter (GET request)
    for schema_name in schema_names:
        tables_url = f"{base_url}/table-summaries"
        tables_params = {
            "catalog_name": catalog_name,
            "schema_name_pattern": schema_name,
            "include_manifest_capabilities": "true"
        }

        tables_resp = requests.get(tables_url, headers=headers, params=tables_params)
        tables_resp.raise_for_status()
        tables = tables_resp.json().get("tables", [])

        for table in tables:
            # Use OR for filtering as specified
            if (
                table.get("table_type") == "FOREIGN"
                or table.get("securable_kind") in {
                    "TABLE_FOREIGN_HIVE_METASTORE_VIEW",
                    "TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW"
                }
            ):
                table_full_name = table.get('full_name')
                get_table_url = f"{base_url}/tables/{table_full_name}"
                tables_params = {
                    "full_name": table_full_name,
                    "include_browse": "true",
                    "include_manifest_capabilities": "true"
                }

                table_resp = requests.get(get_table_url, headers=headers, params=tables_params)
                table_resp.raise_for_status()
                provisioning_info = table_resp.json().get("provisioning_info", dict()).get("state", "")

                if provisioning_info == "ACTIVE":
                    result.append(table_full_name)

    return result

# Example usage:
# catalog = "hms_foreign_catalog"
# token = "dapiXXXXXXXXXX"
# workspace = "https://adb-xxxx.x.azuredatabricks.net"
# foreign_tables = list_foreign_uc_tables_and_views(catalog, token, workspace)
# for entry in foreign_tables:
#     print(entry)