DROP CONNECTION (yabancı katalog)

Şunun için geçerlidir:işaretli evet Databricks SQL işaretli evet Databricks Runtime 17.3 ve üzeri

Önemli

Bu özellik Genel Önizleme aşamasındadır ve şu anda yalnızca katılan müşteriler tarafından kullanılabilir. Önizlemeye katılmak için bu formu doldurarak başvurun. Bu özellik, yalnızca Hive Meta Veri Deposu (HMS) ve Glue Federasyonu kullanarak yabancı kataloglar için bağlantının kesilmesini destekler.

Unity Kataloğu'nda DROP CONNECTION yabancı kataloğu standart kataloğa dönüştürmek için komutunu kullanın. Bağlantı kesildikten sonra, katalog artık dış katalogdan yabancı tabloları senkronize etmez. Bunun yerine, yönetilen veya dış tablolar içeren standart bir Unity Catalog gibi davranır. Kataloğunuz artık Unity Kataloğu'nda yabancı yerine standart olarak etiketlendi. Bu komut dış kataloğunuzdaki tabloları etkilemez; yalnızca Unity Kataloğu'ndaki yabancı kataloğunuzu etkiler.

Katalog üzerinde OWNER, MANAGE, USE_CATALOG ve BROWSE izinleri gerektirir.

Sözdizimi

ALTER CATALOG catalog_name DROP CONNECTION { RESTRICT | FORCE }

Parametreler

  • catalog_name

    Standart kataloğa dönüştürülecek yabancı kataloğun adı.

  • SINIRLAMAK

    Varsayılan davranış. DROP CONNECTION ile RESTRICT, katalogda herhangi bir yabancı tablo veya yabancı görünüm varsa, yabancı kataloğu standart kataloğa dönüştürürken başarısız olur.

    Yabancı tabloları Unity Kataloğu yönetilen veya dış tablolara yükseltmek için bkz . Yabancı tabloyu yönetilen Unity Kataloğu tablosuna dönüştürme veya Yabancı tabloyu dış Unity Kataloğu tablosuna dönüştürme. Yabancı görünümleri dönüştürmek için bkz SET . MANAGED (FOREIGN VIEW).

  • KUVVET

    DROP CONNECTION ile, FORCE yabancı kataloğu standart kataloğa dönüştürürken, yabancı katalogdaki kalan yabancı tabloları veya görünümleri kaldırır. Bu komut, harici kataloğunuzdaki veri veya meta verileri silmez; yalnızca yabancı tabloyu oluşturmak için Unity Catalog'a eşitlenen meta verileri siler.

    Uyarı

    Bu komutu geri alamazsınız. Yabancı tabloları Unity Kataloğu'na yeniden birleştirmek istiyorsanız, yabancı kataloğu yeniden oluşturmanız gerekir.

Örnekler

-- 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.

Yabancı tabloları ve görünümleri kontrol etmek için betikler

Uyarı

kullanmadan DROP CONNECTION RESTRICTönce, Unity Kataloğu REST API'sini kullanarak kataloğunuzdaki yabancı tabloları ve görünümleri denetlemek için bu Python betiklerini kullanabilirsiniz.

Federasyon kataloğundaki tüm yabancı tabloları ve görünümleri listelemek için betik:

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)

AKTİF sağlama durumundaki tüm yabancı tabloları ve görünümleri listelemek için betik:

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)