DLF Data Lake Metadata Query Query Catalog, Database, and Table metadata resources in Alibaba Cloud Data Lake Formation (DLF). CRITICAL: Use only the Python SDK script provided by this Skill. All operations go through the DLF Python SDK ( ) via . This Skill does not invoke any shell-based command-line client and does not require AI-Mode configuration. - DO NOT attempt access via any shell-based command-line client — DLF is not exposed through one in this Skill - DO NOT use curl, wget, or other HTTP clients to call the DLF API directly - MUST use the script provided by this Skill, which wraps…

)\n_ID_PATTERN = re.compile(r'^[a-zA-Z0-9_\\-]+

DLF Data Lake Metadata Query Query Catalog, Database, and Table metadata resources in Alibaba Cloud Data Lake Formation (DLF). CRITICAL: Use only the Python SDK script provided by this Skill. All operations go through the DLF Python SDK ( ) via . This Skill does not invoke any shell-based command-line client and does not require AI-Mode configuration. - DO NOT attempt access via any shell-based command-line client — DLF is not exposed through one in this Skill - DO NOT use curl, wget, or other HTTP clients to call the DLF API directly - MUST use the script provided by this Skill, which wraps…

)\n_PATTERN_PARAM = re.compile(r'^[a-zA-Z0-9_\\-\\.%\\*]+

DLF Data Lake Metadata Query Query Catalog, Database, and Table metadata resources in Alibaba Cloud Data Lake Formation (DLF). CRITICAL: Use only the Python SDK script provided by this Skill. All operations go through the DLF Python SDK ( ) via . This Skill does not invoke any shell-based command-line client and does not require AI-Mode configuration. - DO NOT attempt access via any shell-based command-line client — DLF is not exposed through one in this Skill - DO NOT use curl, wget, or other HTTP clients to call the DLF API directly - MUST use the script provided by this Skill, which wraps…

)\n_MAX_PARAM_LEN = 256\n\n\ndef _validate_param(val, name):\n \"\"\"Validate parameter value for format and length.\"\"\"\n if len(val) > _MAX_PARAM_LEN:\n out_error(f\"Parameter {name} too long (max {_MAX_PARAM_LEN} chars)\")\n if val.startswith('-'):\n out_error(f\"Invalid value for {name}: '{val}' (looks like a flag, not a value)\")\n\n\ndef _validate_name(val, name):\n \"\"\"Validate a resource name (catalog, database, table).\"\"\"\n _validate_param(val, name)\n if not _NAME_PATTERN.match(val):\n out_error(\n f\"Invalid {name}: '{val}'\",\n f\"{name} must contain only alphanumeric characters, hyphens, underscores, or dots\"\n )\n\n\ndef _validate_id(val, name):\n \"\"\"Validate a resource ID (catalog_id).\"\"\"\n _validate_param(val, name)\n if not _ID_PATTERN.match(val):\n out_error(\n f\"Invalid {name}: '{val}'\",\n f\"{name} must contain only alphanumeric characters, hyphens, or underscores\"\n )\n\n\ndef _validate_pattern(val, name):\n \"\"\"Validate a search pattern parameter.\"\"\"\n _validate_param(val, name)\n if not _PATTERN_PARAM.match(val):\n out_error(\n f\"Invalid {name}: '{val}'\",\n f\"{name} must contain only alphanumeric characters, hyphens, underscores, dots, or wildcards (% *)\"\n )\n\n\ndef require_arg(args, name, hint, validator=None):\n \"\"\"Extract a required named argument, validate and exit with error if missing.\"\"\"\n val = extract_arg(args, name)\n if not val:\n out_error(f\"Missing {name}\", hint)\n if validator:\n validator(val, name)\n return val\n\n\ndef extract_pagination_args(args):\n \"\"\"Extract common pagination arguments: --pattern, --max-results, --page-token.\"\"\"\n pattern = extract_arg(args, \"--pattern\")\n max_results = extract_arg(args, \"--max-results\")\n page_token = extract_arg(args, \"--page-token\")\n if pattern:\n _validate_pattern(pattern, \"--pattern\")\n if max_results:\n if not max_results.isdigit() or int(max_results) \u003c 1 or int(max_results) > 10000:\n out_error(\"Invalid --max-results\", \"Must be an integer between 1 and 10000\")\n if page_token:\n _validate_param(page_token, \"--page-token\")\n return pattern, int(max_results) if max_results else None, page_token\n\n\ndef out_paginated(items, next_page_token):\n \"\"\"Output a paginated list result.\"\"\"\n result = {\"count\": len(items), \"items\": items}\n if next_page_token:\n result[\"next_page_token\"] = next_page_token\n out_json(result)\n\n\ndef build_client(args):\n \"\"\"Build DLF client using default credential chain.\"\"\"\n region = extract_arg(args, \"--region\") or \"cn-hangzhou\"\n _validate_name(region, \"--region\")\n\n try:\n credential = CredentialClient()\n except Exception as e:\n out_error(\n f\"Failed to initialize credentials: {e}\",\n \"Configure credentials via environment variables, config file, or instance role. \"\n \"See https://help.aliyun.com/document_detail/378659.html\"\n )\n\n config = Config(\n credential=credential,\n endpoint=f\"dlfnext.{region}.aliyuncs.com\",\n region_id=region,\n user_agent='AlibabaCloud-Agent-Skills/alibabacloud-dlf-manage',\n connect_timeout=5000,\n read_timeout=10000,\n )\n\n try:\n return Client(config)\n except Exception as e:\n out_error(f\"Failed to create DLF client: {e}\",\n \"Check credentials and region.\")\n\n\ndef _serialize(obj, attrs):\n \"\"\"Generic serializer: extract non-None attributes from an SDK object.\"\"\"\n result = {}\n for a in attrs:\n v = getattr(obj, a, None)\n if v is not None:\n result[a] = v\n return result\n\n\ndef serialize_catalog(cat):\n return _serialize(cat, _CATALOG_ATTRS)\n\n\ndef serialize_database(db):\n return _serialize(db, _DATABASE_ATTRS)\n\n\ndef serialize_table(tbl):\n result = _serialize(tbl, _TABLE_ATTRS)\n schema = getattr(tbl, \"schema\", None)\n if schema:\n schema_dict = {}\n fields = getattr(schema, \"fields\", None)\n if fields:\n schema_dict[\"fields\"] = [\n {\"id\": getattr(f, \"id\", i), \"name\": getattr(f, \"name\", \"\"),\n \"type\": str(getattr(f, \"type\", \"\"))}\n for i, f in enumerate(fields)\n ]\n for key in (\"partition_keys\", \"primary_keys\", \"options\", \"comment\"):\n val = getattr(schema, key, None)\n if val is not None:\n schema_dict[key] = val\n result[\"schema\"] = schema_dict\n return result\n\n\n# ====== Action handlers ======\n\ndef action_list_catalogs(client, args):\n pattern, max_results, page_token = extract_pagination_args(args)\n request = dlf_models.ListCatalogsRequest(\n catalog_name_pattern=pattern,\n max_results=max_results,\n page_token=page_token,\n )\n resp = client.list_catalogs(request)\n catalogs = [serialize_catalog(c) for c in (resp.body.catalogs or [])]\n out_paginated(catalogs, resp.body.next_page_token)\n\n\ndef action_get_catalog(client, args):\n name = require_arg(args, \"--catalog\", \"Specify catalog name, e.g. --catalog my_catalog\", _validate_name)\n resp = client.get_catalog(name)\n out_json(serialize_catalog(resp.body))\n\n\ndef action_get_catalog_by_id(client, args):\n cid = require_arg(args, \"--id\", \"Specify catalog ID, e.g. --id clg-paimon-xxxx\", _validate_id)\n resp = client.get_catalog_by_id(cid)\n out_json(serialize_catalog(resp.body))\n\n\ndef action_list_databases(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n pattern, max_results, page_token = extract_pagination_args(args)\n request = dlf_models.ListDatabasesRequest(\n database_name_pattern=pattern,\n max_results=max_results,\n page_token=page_token,\n )\n resp = client.list_databases(catalog_id, request)\n out_paginated(resp.body.databases or [], resp.body.next_page_token)\n\n\ndef action_list_database_details(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n pattern, max_results, page_token = extract_pagination_args(args)\n request = dlf_models.ListDatabaseDetailsRequest(\n database_name_pattern=pattern,\n max_results=max_results,\n page_token=page_token,\n )\n resp = client.list_database_details(catalog_id, request)\n dbs = [serialize_database(d) for d in (resp.body.database_details or [])]\n out_paginated(dbs, resp.body.next_page_token)\n\n\ndef action_get_database(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n database = require_arg(args, \"--database\", \"Specify database name, e.g. --database my_db\", _validate_name)\n resp = client.get_database(catalog_id, database)\n out_json(serialize_database(resp.body))\n\n\ndef action_list_tables(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n database = require_arg(args, \"--database\", \"Specify database name, e.g. --database my_db\", _validate_name)\n pattern, max_results, page_token = extract_pagination_args(args)\n request = dlf_models.ListTablesRequest(\n table_name_pattern=pattern,\n max_results=max_results,\n page_token=page_token,\n )\n resp = client.list_tables(catalog_id, database, request)\n out_paginated(resp.body.tables or [], resp.body.next_page_token)\n\n\ndef action_list_table_details(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n database = require_arg(args, \"--database\", \"Specify database name, e.g. --database my_db\", _validate_name)\n pattern, max_results, page_token = extract_pagination_args(args)\n request = dlf_models.ListTableDetailsRequest(\n table_name_pattern=pattern,\n max_results=max_results,\n page_token=page_token,\n )\n resp = client.list_table_details(catalog_id, database, request)\n tables = [serialize_table(t) for t in (resp.body.table_details or [])]\n out_paginated(tables, resp.body.next_page_token)\n\n\ndef action_get_table(client, args):\n catalog_id = require_arg(args, \"--catalog-id\", \"Specify catalog ID, e.g. --catalog-id clg-paimon-xxxx\", _validate_id)\n database = require_arg(args, \"--database\", \"Specify database name, e.g. --database my_db\", _validate_name)\n table = require_arg(args, \"--table\", \"Specify table name, e.g. --table my_table\", _validate_name)\n resp = client.get_table(catalog_id, database, table)\n out_json(serialize_table(resp.body))\n\n\nACTIONS = {\n \"list-catalogs\": action_list_catalogs,\n \"get-catalog\": action_get_catalog,\n \"get-catalog-by-id\": action_get_catalog_by_id,\n \"list-databases\": action_list_databases,\n \"list-database-details\": action_list_database_details,\n \"get-database\": action_get_database,\n \"list-tables\": action_list_tables,\n \"list-table-details\": action_list_table_details,\n \"get-table\": action_get_table,\n}\n\nHELP_TEXT = \"\"\"Usage: dlf_metadata_query.py \u003caction> [options...]\n\nCatalog Actions:\n list-catalogs [--pattern \u003cname>] List all catalogs\n get-catalog --catalog \u003cname> Get catalog details by name\n get-catalog-by-id --id \u003ccatalog_id> Get catalog details by ID\n\nDatabase Actions:\n list-databases --catalog-id \u003cid> [--pattern \u003cname>] List database names\n list-database-details --catalog-id \u003cid> [--pattern \u003cname>] List database details\n get-database --catalog-id \u003cid> --database \u003cname> Get database details\n\nTable Actions:\n list-tables --catalog-id \u003cid> --database \u003cname> [--pattern \u003cname>] List table names\n list-table-details --catalog-id \u003cid> --database \u003cname> [--pattern \u003cname>] List table details\n get-table --catalog-id \u003cid> --database \u003cname> --table \u003cname> Get table details\n\nGlobal Options:\n --region \u003cregion_id> Optional. Defaults to cn-hangzhou.\n --max-results \u003cN> Optional. Max records per page.\n --page-token \u003ctoken> Optional. Pagination token.\n\nAuthentication:\n Uses default credential chain (CredentialClient). Supports:\n - Environment variables (ALIBABA_CLOUD_ACCESS_KEY_ID / SECRET)\n - Credentials file (~/.alibabacloud/credentials)\n - ECS instance RAM role\n See https://help.aliyun.com/document_detail/378659.html\n\"\"\"\n\n\ndef main():\n args = sys.argv[1:]\n\n if not args or args[0] in (\"--help\", \"-h\", \"help\"):\n print(HELP_TEXT)\n sys.exit(0)\n\n action = args.pop(0)\n\n if action not in ACTIONS:\n all_actions = \", \".join(sorted(ACTIONS.keys()))\n out_error(f\"Unknown action: {action}\",\n f\"Valid actions: {all_actions}\")\n\n client = build_client(args)\n\n try:\n ACTIONS[action](client, args)\n except TeaException as e:\n error_msg = str(e)\n # statusCode is only populated when `data` is a dict containing statusCode\n # (see Tea.exceptions.TeaException). Fall back to matching the dotted code\n # string (e.g. 'Forbidden.RAM', 'EntityNotExist.Catalog').\n status_code = getattr(e, 'statusCode', None)\n code_str = str(getattr(e, 'code', '') or '')\n # Check 401 before 404: 'InvalidAccessKeyId.NotFound' contains \"NotFound\"\n # but is a credential error, not a missing resource.\n if (status_code == 401\n or code_str.startswith('Unauthorized')\n or code_str.startswith('InvalidAccessKey')\n or code_str == 'SignatureDoesNotMatch'):\n out_error(f\"Authentication failed: {error_msg}\",\n \"Check credential configuration. \"\n \"See https://help.aliyun.com/document_detail/378659.html\")\n elif status_code == 403 or code_str.startswith('Forbidden') or 'NoPermission' in code_str:\n out_error(f\"Permission denied: {error_msg}\",\n \"Grant DLF data permissions (LIST/DESCRIBE) in DLF console.\")\n elif status_code == 404 or 'NotExist' in code_str or 'NotFound' in code_str:\n out_error(f\"Resource not found: {error_msg}\")\n else:\n out_error(f\"API error: {error_msg}\")\n except Exception as e:\n out_error(f\"Unexpected error: {e}\")\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":14538,"content_sha256":"58a435dc7ebc5efa81bbcd6038f066095f349dc4908d252ac0b14b5555069633"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"DLF Data Lake Metadata Query","type":"text"}]},{"type":"paragraph","content":[{"text":"Query Catalog, Database, and Table metadata resources in Alibaba Cloud Data Lake Formation (DLF).","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"CRITICAL: Use only the Python SDK script provided by this Skill.","type":"text","marks":[{"type":"strong"}]},{"text":" All operations go through the DLF Python SDK (","type":"text"},{"text":"alibabacloud-dlfnext20250310","type":"text","marks":[{"type":"code_inline"}]},{"text":") via ","type":"text"},{"text":"scripts/dlf_metadata_query.py","type":"text","marks":[{"type":"code_inline"}]},{"text":". This Skill does not invoke any shell-based command-line client and does not require AI-Mode configuration.","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DO NOT","type":"text","marks":[{"type":"strong"}]},{"text":" attempt access via any shell-based command-line client — DLF is not exposed through one in this Skill","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DO NOT","type":"text","marks":[{"type":"strong"}]},{"text":" use curl, wget, or other HTTP clients to call the DLF API directly","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"MUST","type":"text","marks":[{"type":"strong"}]},{"text":" use the ","type":"text"},{"text":"scripts/dlf_metadata_query.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" script provided by this Skill, which wraps the DLF Python SDK","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"All query operations are executed via ","type":"text"},{"text":"python3 scripts/dlf_metadata_query.py \u003caction> [options]","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Architecture","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Catalog (Data Catalog)\n └── Database\n └── Table\n ├── Schema (column definitions)\n ├── PartitionKeys (partition keys)\n ├── PrimaryKeys (primary keys)\n └── Options (table properties)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Installation","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"pip install -r requirements.txt","type":"text"}]},{"type":"paragraph","content":[{"text":"requirements.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":" pins the full transitive dependency closure (including ","type":"text"},{"text":"alibabacloud-dlfnext20250310==3.0.0","type":"text","marks":[{"type":"code_inline"}]},{"text":") for reproducible installs.","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Pre-check: Python SDK dependency","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 -c \"from alibabacloud_dlfnext20250310.client import Client; print('SDK OK')\"","type":"text"}]},{"type":"paragraph","content":[{"text":"If not installed, run ","type":"text"},{"text":"pip install -r requirements.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Authentication","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Pre-check: Alibaba Cloud Credentials Required","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"Use the default credential chain (CredentialClient) to obtain credentials automatically. Supported sources (in priority order):","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Environment variables (ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Configuration file (~/.alibabacloud/credentials)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ECS Instance RAM Role","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"OIDC Role ARN","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Security Rules:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEVER","type":"text","marks":[{"type":"strong"}]},{"text":" read, echo, or print AK/SK values","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEVER","type":"text","marks":[{"type":"strong"}]},{"text":" ask the user to input AK/SK directly in the conversation or command line","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEVER","type":"text","marks":[{"type":"strong"}]},{"text":" explicitly handle or pass AK/SK in code — rely on the default credential chain","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"See https://help.aliyun.com/document_detail/378659.html for credential configuration details.","type":"text"}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"RAM Permissions","type":"text"}]},{"type":"paragraph","content":[{"text":"This Skill only involves read-only operations (List / Get). See ","type":"text"},{"text":"references/ram-policies.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ram-policies.md","title":null}}]},{"text":" for the full permission list.","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"[MUST] Permission Failure Handling:","type":"text","marks":[{"type":"strong"}]},{"text":" When any command or API call fails due to permission errors at any point during execution, follow this process:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read ","type":"text"},{"text":"references/ram-policies.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" to get the full list of permissions required by this SKILL","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pause and wait until the user confirms that the required permissions have been granted","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Parameter Confirmation","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"IMPORTANT: Parameter Confirmation","type":"text","marks":[{"type":"strong"}]},{"text":" — Before invoking the API, the following user-specific parameters must be confirmed with the user; do not assume them. Region defaults to cn-hangzhou; if the user does not specify one, use the default without asking.","type":"text"}]}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Parameter","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Required","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Default","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"region","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"No","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Region ID","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cn-hangzhou","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"catalog_name","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Conditional","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Catalog name (","type":"text"},{"text":"--catalog","type":"text","marks":[{"type":"code_inline"}]},{"text":", required for GetCatalog)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"-","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"catalog_id","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Conditional","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Catalog ID (","type":"text"},{"text":"--catalog-id","type":"text","marks":[{"type":"code_inline"}]},{"text":", required when querying databases/tables, e.g. clg-paimon-xxxx)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"-","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"database","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Conditional","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Database name (","type":"text"},{"text":"--database","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"-","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"table","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Conditional","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Table name (","type":"text"},{"text":"--table","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"-","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Core Workflow","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"The script automatically reads AK/SK from environment variables and reports a clear error if they are missing. Region defaults to cn-hangzhou; use the default if the user does not specify one.","type":"text"}]}]},{"type":"paragraph","content":[{"text":"You MUST use","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"scripts/dlf_metadata_query.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" to query metadata. Do not use shell-based command-line clients or curl. Actions are in ","type":"text"},{"text":"kebab-case","type":"text","marks":[{"type":"strong"}]},{"text":".","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"CRITICAL — list vs. list-*-details: pick the lightest action that satisfies the request.","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For listing names / IDs (including fuzzy search): use ","type":"text"},{"text":"list-databases","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"list-tables","type":"text","marks":[{"type":"code_inline"}]},{"text":". These call the ","type":"text"},{"text":"ListDatabases","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"ListTables","type":"text","marks":[{"type":"code_inline"}]},{"text":" API.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For full attributes / Schema / properties: use ","type":"text"},{"text":"list-database-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"list-table-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"get-database","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"get-table","type":"text","marks":[{"type":"code_inline"}]},{"text":". These call the heavier ","type":"text"},{"text":"*-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"Get*","type":"text","marks":[{"type":"code_inline"}]},{"text":" APIs.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Default to the lightweight ","type":"text","marks":[{"type":"strong"}]},{"text":"list-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" action","type":"text","marks":[{"type":"strong"}]},{"text":" unless the user explicitly asks for full configuration, Schema, or properties. Calling ","type":"text"},{"text":"list-*-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" when only names are needed is incorrect.","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Query Operations","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# ---- Catalog ----\n\n# 1. List all Catalogs (names + minimal info — preferred for listing/searching)\npython3 scripts/dlf_metadata_query.py list-catalogs\n\n# 2. Fuzzy-search Catalogs by name (uses ListCatalogs)\npython3 scripts/dlf_metadata_query.py list-catalogs --pattern test\n\n# 3. Get Catalog details (by name) — use only when full Catalog config is needed\npython3 scripts/dlf_metadata_query.py get-catalog --catalog \u003ccatalog_name>\n\n# 4. Get Catalog details (by ID) — use only when full Catalog config is needed\npython3 scripts/dlf_metadata_query.py get-catalog-by-id --id \u003ccatalog_id>\n\n# ---- Database ----\n\n# 5. List databases (NAMES only — DEFAULT for \"list / show / which databases\", calls ListDatabases)\npython3 scripts/dlf_metadata_query.py list-databases --catalog-id \u003ccatalog_id>\n\n# 6. List database details (full attributes, calls ListDatabaseDetails) — use ONLY when the user asks for properties / configs / location / owner\npython3 scripts/dlf_metadata_query.py list-database-details --catalog-id \u003ccatalog_id>\n\n# 7. Get a single database's details (calls GetDatabase) — use when the user asks for ONE specific database's full info\npython3 scripts/dlf_metadata_query.py get-database --catalog-id \u003ccatalog_id> --database \u003cdb_name>\n\n# ---- Table ----\n\n# 8. List tables (NAMES only — DEFAULT for \"list / show / which tables\", calls ListTables)\npython3 scripts/dlf_metadata_query.py list-tables --catalog-id \u003ccatalog_id> --database \u003cdb_name>\n\n# 9. Fuzzy-search tables by name (DEFAULT for \"search / find tables matching ...\", calls ListTables)\npython3 scripts/dlf_metadata_query.py list-tables --catalog-id \u003ccatalog_id> --database \u003cdb_name> --pattern user%\n\n# 10. List table details with Schema (calls ListTableDetails) — use ONLY when the user explicitly asks for Schema / columns / properties of all tables\npython3 scripts/dlf_metadata_query.py list-table-details --catalog-id \u003ccatalog_id> --database \u003cdb_name>\n\n# 11. Get a single table's details with Schema (calls GetTable) — use when the user asks for ONE specific table's Schema\npython3 scripts/dlf_metadata_query.py get-table --catalog-id \u003ccatalog_id> --database \u003cdb_name> --table \u003ctable_name>","type":"text"}]},{"type":"paragraph","content":[{"text":"Specify region (defaults to cn-hangzhou): add ","type":"text"},{"text":"--region cn-shanghai","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Typical Query Flow","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"1. list-catalogs → get catalog_name and catalog_id (names only)\n2. list-databases → use catalog_id to view available database names\n3. list-tables → use catalog_id + database to view available table names\n4. get-table → use catalog_id + database + table to view ONE table's Schema","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Only step 4 (","type":"text"},{"text":"get-table","type":"text","marks":[{"type":"code_inline"}]},{"text":") is a \"details\" call, because Schema is what the user actually asked for. Steps 1–3 stay on the lightweight ","type":"text"},{"text":"list-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" actions.","type":"text"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Fuzzy Search","type":"text"}]},{"type":"paragraph","content":[{"text":"All list operations support the ","type":"text"},{"text":"--pattern","type":"text","marks":[{"type":"code_inline"}]},{"text":" argument for fuzzy name matching, using ","type":"text"},{"text":"%","type":"text","marks":[{"type":"code_inline"}]},{"text":" as the wildcard. ","type":"text"},{"text":"Use the lightweight ","type":"text","marks":[{"type":"strong"}]},{"text":"list-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" action for pattern search unless the user explicitly asks for the full Schema / properties of every match.","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Search Catalogs whose name contains \"test\"\npython3 scripts/dlf_metadata_query.py list-catalogs --pattern %test%\n\n# Search databases whose name starts with \"prod_\"\npython3 scripts/dlf_metadata_query.py list-databases --catalog-id \u003ccatalog_id> --pattern prod_%\n\n# Search tables whose name starts with \"user\" (DEFAULT — calls ListTables)\npython3 scripts/dlf_metadata_query.py list-tables --catalog-id \u003ccatalog_id> --database \u003cdb_name> --pattern user%","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Anti-pattern","type":"text","marks":[{"type":"strong"}]},{"text":": do not use ","type":"text"},{"text":"list-table-details --pattern ...","type":"text","marks":[{"type":"code_inline"}]},{"text":" to search by name. That calls ","type":"text"},{"text":"ListTableDetails","type":"text","marks":[{"type":"code_inline"}]},{"text":" and is heavier than required. Reach for ","type":"text"},{"text":"list-table-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" only when the user has explicitly asked for the Schema / columns of every matching table.","type":"text"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Output Format","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"List operations","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"{\"count\": N, \"items\": [...]}","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Get operations","type":"text","marks":[{"type":"strong"}]},{"text":": a single JSON object","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Errors","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"{\"error\": \"...\", \"hint\": \"...\"}","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Verification","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"list-catalogs","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns the Catalog list, the connection and permissions are working:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/dlf_metadata_query.py list-catalogs --region cn-hangzhou","type":"text"}]},{"type":"paragraph","content":[{"text":"See ","type":"text"},{"text":"references/verification-method.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/verification-method.md","title":null}}]},{"text":" for detailed verification steps.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Best Practices","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer the lightweight ","type":"text","marks":[{"type":"strong"}]},{"text":"list-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" action over ","type":"text","marks":[{"type":"strong"}]},{"text":"list-*-details","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" / ","type":"text","marks":[{"type":"strong"}]},{"text":"get-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]},{"text":" When the task only requires listing resource ","type":"text"},{"text":"names","type":"text","marks":[{"type":"strong"}]},{"text":", ","type":"text"},{"text":"IDs","type":"text","marks":[{"type":"strong"}]},{"text":", or ","type":"text"},{"text":"fuzzy matching","type":"text","marks":[{"type":"strong"}]},{"text":", you MUST use ","type":"text"},{"text":"list-catalogs","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"list-databases","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"list-tables","type":"text","marks":[{"type":"code_inline"}]},{"text":" (which call ","type":"text"},{"text":"ListCatalogs","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"ListDatabases","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"ListTables","type":"text","marks":[{"type":"code_inline"}]},{"text":"). Only use ","type":"text"},{"text":"list-*-details","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"get-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" when the user explicitly asks for full configuration, Schema, columns, properties, owner, or location. Reaching for the heavier API when the lighter one suffices is incorrect.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"List before Get","type":"text","marks":[{"type":"strong"}]},{"text":": use list-catalogs to obtain catalog_id first, then use catalog_id to query databases and tables.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use fuzzy search with the lightweight action","type":"text","marks":[{"type":"strong"}]},{"text":": the ","type":"text"},{"text":"--pattern","type":"text","marks":[{"type":"code_inline"}]},{"text":" argument supports fuzzy matching; use it on ","type":"text"},{"text":"list-tables","type":"text","marks":[{"type":"code_inline"}]},{"text":" (not ","type":"text"},{"text":"list-table-details","type":"text","marks":[{"type":"code_inline"}]},{"text":") unless full Schema is also requested.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pagination","type":"text","marks":[{"type":"strong"}]},{"text":": use ","type":"text"},{"text":"--max-results","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"--page-token","type":"text","marks":[{"type":"code_inline"}]},{"text":" for paginated queries when there is a lot of data.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Catalog ID vs Name","type":"text","marks":[{"type":"strong"}]},{"text":": when querying Database/Table, use ","type":"text"},{"text":"catalog_id","type":"text","marks":[{"type":"code_inline"}]},{"text":" (e.g. clg-paimon-xxxx), not the catalog name.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"References","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Reference","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"references/related-apis.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/related-apis.md","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full API list and parameter descriptions","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"references/ram-policies.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ram-policies.md","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"RAM permission policy","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"references/acceptance-criteria.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/acceptance-criteria.md","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Acceptance criteria","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"references/verification-method.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/verification-method.md","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Verification method","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"DLF API overview","type":"text","marks":[{"type":"link","attrs":{"href":"https://help.aliyun.com/zh/dlf/dlf-2-0/developer-reference/api-dlfnext-2025-03-10-overview","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Official API documentation","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"DLF product documentation","type":"text","marks":[{"type":"link","attrs":{"href":"https://help.aliyun.com/zh/dlf/dlf-2-0","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Product documentation","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python SDK PyPI","type":"text","marks":[{"type":"link","attrs":{"href":"https://pypi.org/project/alibabacloud-dlfnext20250310/","title":null}}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SDK version info","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"alibabacloud-dlf-manage","author":"@skillopedia","source":{"stars":133,"repo_name":"alibabacloud-aiops-skills","origin_url":"https://github.com/aliyun/alibabacloud-aiops-skills/blob/HEAD/skills/analyticscomputing/dlf/alibabacloud-dlf-manage/SKILL.md","repo_owner":"aliyun","body_sha256":"97469097247d7e9685feb181a5d7ab64262555d5400f816606cdbae04f2b01b0","cluster_key":"8c65a4dc3febb467f53525487a99793144c53b85e8aaf8c77e022ecd734a5abe","clean_bundle":{"format":"clean-skill-bundle-v1","source":"aliyun/alibabacloud-aiops-skills/skills/analyticscomputing/dlf/alibabacloud-dlf-manage/SKILL.md","attachments":[{"id":"afaef238-601f-5508-b8a6-ce5aee6aa327","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/afaef238-601f-5508-b8a6-ce5aee6aa327/attachment.md","path":"references/acceptance-criteria.md","size":3965,"sha256":"a5ed9591d9dd238ff9c6317ca08b0bfb9d5663c5dfda90d0022e436aecc08532","contentType":"text/markdown; charset=utf-8"},{"id":"9bea7368-1a68-59a9-8e68-53d345d203bc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9bea7368-1a68-59a9-8e68-53d345d203bc/attachment.md","path":"references/ram-policies.md","size":1753,"sha256":"591cd4b46c9b1d1eb795c7dbf7f5af0253ead85432581d6a571498f0f346c648","contentType":"text/markdown; charset=utf-8"},{"id":"193f3596-7217-55dc-9f98-22da94c4ea18","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/193f3596-7217-55dc-9f98-22da94c4ea18/attachment.md","path":"references/related-apis.md","size":4624,"sha256":"ec6640d518d9ed7d86f9f46b84a8b45c9372ec9a2295dc66112e360b61f5a285","contentType":"text/markdown; charset=utf-8"},{"id":"dcb859b4-3971-55ac-8106-343672114d2b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dcb859b4-3971-55ac-8106-343672114d2b/attachment.md","path":"references/verification-method.md","size":2028,"sha256":"c7b44361b20c903b6261253e388450688c490743f46fb3deca9831f39dcbbafb","contentType":"text/markdown; charset=utf-8"},{"id":"8896b9f2-70a4-51c0-9aca-40c475d4ae0c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8896b9f2-70a4-51c0-9aca-40c475d4ae0c/attachment.py","path":"scripts/dlf_metadata_query.py","size":14538,"sha256":"58a435dc7ebc5efa81bbcd6038f066095f349dc4908d252ac0b14b5555069633","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"b310d8c3a6bed0f4b915c561ab7adbdef2a483de5ccd8a173e6dea84ccb445c1","attachment_count":5,"text_attachments":5,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/analyticscomputing/dlf/alibabacloud-dlf-manage/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"data-analytics","category_label":"Data"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"data-analytics","import_tag":"clean-skills-v1","description":"Query Catalog, database, and table metadata resources in Alibaba Cloud Data Lake Formation (DLF).\nProvides read-only queries via the DLF OpenAPI Python SDK, supporting listing and viewing\nCatalogs, databases, tables with their detailed information and Schema definitions.\nUse cases: \"list available Catalogs\", \"list databases\", \"view table schema\",\n\"search tables\", \"search tables by name\", \"fuzzy search\", \"view DLF metadata\",\n\"what databases are in the data lake\", \"what columns does a table have\",\n\"find tables whose name contains xxx\".\nThis Skill only contains read-only operations — no create, modify, or delete operations.\n"}},"renderedAt":1782981832384}

DLF Data Lake Metadata Query Query Catalog, Database, and Table metadata resources in Alibaba Cloud Data Lake Formation (DLF). CRITICAL: Use only the Python SDK script provided by this Skill. All operations go through the DLF Python SDK ( ) via . This Skill does not invoke any shell-based command-line client and does not require AI-Mode configuration. - DO NOT attempt access via any shell-based command-line client — DLF is not exposed through one in this Skill - DO NOT use curl, wget, or other HTTP clients to call the DLF API directly - MUST use the script provided by this Skill, which wraps…