View a markdown version of this page

Uso de la API de metadatos del controlador de Amazon Redshift para aplicaciones y herramientas - Amazon Redshift

Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la publicación del blog.

Uso de la API de metadatos del controlador de Amazon Redshift para aplicaciones y herramientas

Para las aplicaciones y herramientas que se conectan a Amazon Redshift, como una herramienta de inteligencia empresarial o un editor de consultas, recomendamos que se utilice la API de metadatos del controlador proporcionada por los controladores JDBC 2.x, ODBC 2.x o Python de Amazon Redshift para detectar los metadatos sobre los objetos del almacenamiento de datos, incluidas las bases de datos, los esquemas, las tablas, las columnas y los tipos de datos. Como alternativas, puede utilizar comandos SHOW de Amazon Redshift.

Utilice la API de metadatos del controlador para obtener los siguientes beneficios:

  • Compatible con las especificaciones. Los controladores JDBC y ODBC implementan interfaces de metadatos estándar (DatabaseMetaData en JDBC, SQLTables y SQLColumns en ODBC). Dado que la API de base de datos de Python (PEP 249) no define una especificación de API de metadatos, el controlador de Python de Amazon Redshift sigue la especificación DatabaseMetaData de JDBC y proporciona métodos equivalentes como get_tables(), get_columns() y get_schemas(). Estas API siguen especificaciones bien definidas, por lo que el código de integración es portátil. A medida que Amazon Redshift evoluciona sus tablas de sistema internas, la aplicación no necesita cambiar.

  • Rendimiento optimizado. La API de metadatos del controlador está optimizada para devolver los metadatos de forma eficiente. AWS sigue invirtiendo en el rendimiento de la API de metadatos de los controladores.

  • Compatible con versiones posteriores. Amazon Redshift sigue las especificaciones del conector de JDBC, ODBC y Python. Al programar con estas API estándar, la aplicación está protegida contra los cambios en la estructura del catálogo del sistema subyacente.

Ejemplo: uso de DatabaseMetaData.getTables() de JDBC para recuperar los metadatos de las tablas

DatabaseMetaData dbmd = connection.getMetaData(); // getTables(catalog, schemaPattern, tableNamePattern, types) // catalog: "test" — filters to the database named "test" // schemaPattern: "test_pattern" — filters schemas matching this pattern (supports SQL wildcards % and _) // tableNamePattern: null — no filter, returns all table names // types: {"TABLE", "EXTERNAL TABLE"} — only return regular tables and external tables ResultSet rs = dbmd.getTables("test", "test_pattern", null, new String[] {"TABLE", "EXTERNAL TABLE"});

Ejemplo: uso de cursor.get_columns() de Python para recuperar los metadatos de las columnas

cursor: redshift_connector.Cursor = conn.cursor() # get_columns(catalog, schema_pattern, table_name_pattern, column_name_pattern) # catalog: 'test' — filters to the database named "test" # schema_pattern: 'test_pattern' — filters schemas matching this pattern (supports SQL wildcards % and _) # table_name_pattern: 'testabc' — filters to the table named "testabc" # column_name_pattern: '%' — wildcard, returns all columns in the matching table result: tuple = cursor.get_columns('test', 'test_pattern', 'testabc', '%')

Ejemplo: uso de SQLPrimaryKeys() de ODBC para recuperar los metadatos de la clave principal

// SQLPrimaryKeys(hstmt, catalog, catalog_len, schema, schema_len, table, table_len) // catalog: "test" — filters to the database named "test" // schema: "test_schema" — filters to the schema named "test_schema" // table: "test_table" — retrieves primary key columns for this table // Note: Unlike getTables/getColumns, SQLPrimaryKeys does NOT support wildcard patterns. retcode = SQLPrimaryKeys(hstmt, (SQLCHAR *)"test", SQL_NTS, (SQLCHAR *)"test_schema", SQL_NTS, (SQLCHAR *)"test_table", SQL_NTS); while (SQL_SUCCEEDED(retcode = SQLFetch(hstmt))) { for (i = 1; i <= columns; i++) { retcode = SQLGetData(hstmt, i, SQL_C_CHAR, buf, sizeof(buf), &indicator); } }

Ejemplo: uso de SQLTables() de ODBC para mostrar bases de datos y esquemas

La API de ODBC no proporciona funciones independientes para mostrar catálogos o esquemas. En su lugar, se utilizan convenciones de llamadas especiales de SQLTables() para recuperar esta información.

Muestra de todas las bases de datos (catálogos)

Llame a SQLTables() con CatalogName establecido en SQL_ALL_CATALOGS. Establezca SchemaName y TableName para vaciar cadenas. El conjunto de resultados devuelve valores válidos solo en la columna de TABLE_CAT. Todas las demás columnas contienen valores NULL.

// List all catalogs (databases) available on the data source. retcode = SQLTables(hstmt, (SQLCHAR *)SQL_ALL_CATALOGS, SQL_NTS, // CatalogName = "%" (SQL_ALL_CATALOGS) (SQLCHAR *)"", 0, // SchemaName = "" (empty string) (SQLCHAR *)"", 0, // TableName = "" (empty string) NULL, 0); // TableType = NULL (not filtered)

Muestra de todos los esquemas

Llame a SQLTables() con SchemaName establecido en SQL_ALL_SCHEMAS. Establezca CatalogName y TableName para vaciar cadenas.

// List all schemas available on the data source. retcode = SQLTables(hstmt, (SQLCHAR *)"", 0, // CatalogName = "" (empty string) (SQLCHAR *)SQL_ALL_SCHEMAS, SQL_NTS, // SchemaName = "%" (SQL_ALL_SCHEMAS) (SQLCHAR *)"", 0, // TableName = "" (empty string) NULL, 0); // TableType = NULL (not filtered)
nota

La especificación de ODBC define solo TABLE_SCHEM como válida para la enumeración de esquemas. Amazon Redshift también completa TABLE_CAT porque admite la detección de metadatos entre bases de datos y cada esquema se limita a una base de datos específica.