Metacomandos de Amazon Redshift RSQL - Amazon Redshift

Metacomandos de Amazon Redshift RSQL

Los metacomandos de Amazon Redshift RSQL devuelven registros informativos sobre bases de datos u objetos de base de datos específicos. Los resultados pueden incluir varias columnas y metadatos. Otros comandos realizan acciones específicas. Estos comandos van precedidos de una barra invertida.

\d[S+]

Muestra las tablas creadas por el usuario local, las vistas regulares, las vistas de enlace tardío y las vistas materializadas. \dS también enumera tablas y vistas, como \d, pero los objetos del sistema se incluyen en los registros devueltos. Los resultados + en la columna de metadatos adicionales description para todos los objetos enumerados. A continuación se muestran los registros de ejemplo devueltos como resultado del comando.

List of relations schema | name | type | owner --------+-----------+-------+--------- public | category | table | awsuser public | date | table | awsuser public | event | table | awsuser public | listing | table | awsuser public | sales | table | awsuser public | users | table | awsuser public | venue | table | awsuser (7 rows)

\d[S+] NOMBRE

Describe una tabla, vista o índice. Incluye los nombres y tipos de columnas. También proporciona el estilo diststyle, la configuración de copias de seguridad, la fecha de creación (tablas creadas después de octubre de 2018) y las restricciones. Por ejemplo, \dS+ sample devuelve las propiedades de objeto. Anexar S+ da como resultado columnas adicionales incluidas en los registros devueltos.

Table "public.sample" Column | Type | Collation | Nullable | Default Value | Encoding | DistKey | SortKey --------+-----------------------------+----------------+----------+---------------+-----------+---------+--------- col1 | smallint | | NO | | none | t | 1 col2 | character(100) | case_sensitive | YES | | none | f | 2 col3 | character varying(100) | case_sensitive | YES | | text32k | f | 3 col4 | timestamp without time zone | | YES | | runlength | f | 0 col5 | super | | YES | | zstd | f | 0 col6 | bigint | | YES | | az64 | f | 0 Diststyle: KEY Backup: YES Created: 2021-07-20 19:47:27.997045 Unique Constraints: "sample_pkey" PRIMARY KEY (col1) "sample_col2_key" UNIQUE (col2) Foreign-key constraints: "sample_col2_fkey" FOREIGN KEY (col2) REFERENCES lineitem(l_orderkey)

El estilo de distribución, o Diststyle, de la tabla puede ser KEY, AUTO, EVEN o ALL.

Backup indica si se realiza una copia de seguridad de la tabla cuando se toma una instantánea. Los valores válidos son YES o NO.

Create es la marca de tiempo de cuando se crea la tabla. La fecha de creación no está disponible para las tablas de Amazon Redshift creadas antes de noviembre de 2018. Las tablas creadas antes de esta fecha muestran n/a (No disponible).

Unique Constraints enumera las restricciones de clave única y principal de la tabla.

Foreign-key constraints enumera las restricciones de clave extranjera de la tabla.

\dC[+] [PATRÓN]

Enumera las conversiones. Incluye el tipo de origen, el tipo de destino y si la conversión está implícita.

A continuación, se muestra un subconjunto de resultados de \dC+.

List of casts source type | target type | function | implicit? | description -----------------------------+-----------------------------+---------------------+---------------+------------- "char" | character | bpchar | in assignment | "char" | character varying | text | in assignment | "char" | integer | int4 | no | "char" | text | text | yes | "path" | point | point | no | "path" | polygon | polygon | in assignment | abstime | date | date | in assignment | abstime | integer | (binary coercible) | no | abstime | time without time zone | time | in assignment | abstime | timestamp with time zone | timestamptz | yes | abstime | timestamp without time zone | timestamp | yes | bigint | bit | bit | no | bigint | boolean | bool | yes | bigint | character | bpchar | in assignment | bigint | character varying | text | in assignment | bigint | double precision | float8 | yes | bigint | integer | int4 | in assignment | bigint | numeric | numeric | yes | bigint | oid | oid | yes | bigint | real | float4 | yes | bigint | regclass | oid | yes | bigint | regoper | oid | yes | bigint | regoperator | oid | yes | bigint | regproc | oid | yes | bigint | regprocedure | oid | yes | bigint | regtype | oid | yes | bigint | smallint | int2 | in assignment | bigint | super | int8_partiql | in assignment |

\dd[S] [PATRÓN]

Muestra las descripciones de objetos que no se muestran en ningún otro lugar.

\de

Muestra las tablas externas. Esto incluye las tablas del catálogo de datos AWS Glue, Hive Metastore y tablas federadas de Amazon RDS/Aurora MySQL, Amazon RDS/Aurora PostgreSQL y tablas de recurso compartido de datos de Amazon Redshift.

\de NOMBRE

Describe una tabla externa.

El siguiente ejemplo muestra una tabla externa de AWS Glue.

# \de spectrum.lineitem Glue External table "spectrum.lineitem" Column | External Type | Redshift Type | Position | Partition Key | Nullable -----------------+---------------+---------------+----------+---------------+---------- l_orderkey | bigint | bigint | 1 | 0 | l_partkey | bigint | bigint | 2 | 0 | l_suppkey | int | int | 3 | 0 | l_linenumber | int | int | 4 | 0 | l_quantity | decimal(12,2) | decimal(12,2) | 5 | 0 | l_extendedprice | decimal(12,2) | decimal(12,2) | 6 | 0 | l_discount | decimal(12,2) | decimal(12,2) | 7 | 0 | l_tax | decimal(12,2) | decimal(12,2) | 8 | 0 | l_returnflag | char(1) | char(1) | 9 | 0 | l_linestatus | char(1) | char(1) | 10 | 0 | l_shipdate | date | date | 11 | 0 | l_commitdate | date | date | 12 | 0 | l_receiptdate | date | date | 13 | 0 | l_shipinstruct | char(25) | char(25) | 14 | 0 | l_shipmode | char(10) | char(10) | 15 | 0 | l_comment | varchar(44) | varchar(44) | 16 | 0 | Location: s3://redshiftbucket/kfhose2019/12/31 Input_format: org.apache.hadoop.mapred.TextInputFormat Output_format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Serialization_lib: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe Serde_parameters: {"field.delim":"|","serialization.format":"|"} Parameters: {"EXTERNAL":"TRUE","numRows":"178196721475","transient_lastDdlTime":"1577771873"}

Una tabla de Hive Metastore.

# \de emr.lineitem Hive Metastore External Table "emr.lineitem" Column | External Type | Redshift Type | Position | Partition Key | Nullable -----------------+---------------+---------------+----------+---------------+---------- l_orderkey | bigint | bigint | 1 | 0 | l_partkey | bigint | bigint | 2 | 0 | l_suppkey | int | int | 3 | 0 | l_linenumber | int | int | 4 | 0 | l_quantity | decimal(12,2) | decimal(12,2) | 5 | 0 | l_extendedprice | decimal(12,2) | decimal(12,2) | 6 | 0 | l_discount | decimal(12,2) | decimal(12,2) | 7 | 0 | l_tax | decimal(12,2) | decimal(12,2) | 8 | 0 | l_returnflag | char(1) | char(1) | 9 | 0 | l_linestatus | char(1) | char(1) | 10 | 0 | l_commitdate | date | date | 11 | 0 | l_receiptdate | date | date | 12 | 0 | l_shipinstruct | char(25) | char(25) | 13 | 0 | l_shipmode | char(10) | char(10) | 14 | 0 | l_comment | varchar(44) | varchar(44) | 15 | 0 | l_shipdate | date | date | 16 | 1 | Location: s3://redshiftbucket/cetas Input_format: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat Output_format: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat Serialization_lib: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe Serde_parameters: {"serialization.format":"1"} Parameters: {"EXTERNAL":"TRUE", "numRows":"4307207", "transient_lastDdlTime":"1626990007"}

Tabla externa de PostgreSQL.

# \de pgrsql.alltypes Postgres Federated Table "pgrsql.alltypes" Column | External Type | Redshift Type | Position | Partition Key | Nullable --------+-----------------------------+-----------------------------+----------+---------------+---------- col1 | bigint | bigint | 1 | 0 | col2 | bigint | bigint | 2 | 0 | col5 | boolean | boolean | 3 | 0 | col6 | box | varchar(65535) | 4 | 0 | col7 | bytea | varchar(65535) | 5 | 0 | col8 | character(10) | character(10) | 6 | 0 | col9 | character varying(10) | character varying(10) | 7 | 0 | col10 | cidr | varchar(65535) | 8 | 0 | col11 | circle | varchar(65535) | 9 | 0 | col12 | date | date | 10 | 0 | col13 | double precision | double precision | 11 | 0 | col14 | inet | varchar(65535) | 12 | 0 | col15 | integer | integer | 13 | 0 | col16 | interval | varchar(65535) | 14 | 0 | col17 | json | varchar(65535) | 15 | 0 | col18 | jsonb | varchar(65535) | 16 | 0 | col19 | line | varchar(65535) | 17 | 0 | col20 | lseg | varchar(65535) | 18 | 0 | col21 | macaddr | varchar(65535) | 19 | 0 | col22 | macaddr8 | varchar(65535) | 20 | 0 | col23 | money | varchar(65535) | 21 | 0 | col24 | numeric | numeric(38,20) | 22 | 0 | col25 | path | varchar(65535) | 23 | 0 | col26 | pg_lsn | varchar(65535) | 24 | 0 | col28 | point | varchar(65535) | 25 | 0 | col29 | polygon | varchar(65535) | 26 | 0 | col30 | real | real | 27 | 0 | col31 | smallint | smallint | 28 | 0 | col32 | smallint | smallint | 29 | 0 | col33 | integer | integer | 30 | 0 | col34 | text | varchar(65535) | 31 | 0 | col35 | time without time zone | varchar(65535) | 32 | 0 | col36 | time with time zone | varchar(65535) | 33 | 0 | col37 | timestamp without time zone | timestamp without time zone | 34 | 0 | col38 | timestamp with time zone | timestamp with time zone | 35 | 0 | col39 | tsquery | varchar(65535) | 36 | 0 | col40 | tsvector | varchar(65535) | 37 | 0 | col41 | txid_snapshot | varchar(65535) | 38 | 0 | col42 | uuid | varchar(65535) | 39 | 0 | col43 | xml | varchar(65535) | 40 | 0 |

\df[anptw][S+] [PATRÓN]

Enumera funciones de varios tipos. El comando \df, por ejemplo, devuelve una lista de funciones. Los resultados incluyen propiedades como nombre, tipo de datos devuelto, privilegios de acceso y metadatos adicionales. Los tipos de funciones pueden incluir desencadenadores, procedimientos almacenados, funciones de ventana y otros tipos. Cuando anexa S+ al comando, por ejemplo, \dfantS+, se incluyen columnas de metadatos adicionales, comoowner, security y access privileges.

\dL[S+] [PATRÓN]

Enumera datos sobre los lenguajes de procedimiento asociados a la base de datos. La información incluye el nombre, como plpgsql, y metadatos adicionales, que incluyen si es de confianza, privilegios de acceso y descripción. La llamada de muestra es, por ejemplo, \dLS+, que enumera los lenguajes y sus propiedades. Cuando anexa S+ al comando, se incluyen columnas de metadatos adicionales, como call handler y access privileges.

Resultados de ejemplo:

List of languages name | trusted | internal language | call handler | validator | access privileges | description -----------+---------+-------------------+-------------------------+------------------------------------------------------------+-------------------+-------------------------------- c | f | t | - | fmgr_c_validator(oid) | | Dynamically-loaded C functions exfunc | f | f | exfunc_call_handler() | - | rdsdb=U/rdsdb | internal | f | t | - | fmgr_internal_validator(oid) | | Built-in functions mlfunc | f | f | mlfunc_call_handler() | - | rdsdb=U/rdsdb | plpgsql | t | f | plpgsql_call_handler() | plpgsql_validator(oid) | | plpythonu | f | f | plpython_call_handler() | plpython_compiler(cstring,cstring,cstring,cstring,cstring) | rdsdb=U/rdsdb | sql | t | t | - | fmgr_sql_validator(oid) | =U/rdsdb | SQL-language functions

\dm[S+] [PATRÓN]

Enumera las vistas materializadas. Por ejemplo, \dmS+ enumera las vistas materializadas y sus propiedades. Cuando anexa S+ al comando, se incluyen columnas de metadatos adicionales.

\dn[S+] [PATRÓN]

Enumera esquemas. Cuando anexa S+ al comando, por ejemplo, \dnS+, se incluyen columnas de metadatos adicionales, como description y access privileges.

\dp [PATRÓN]

Enumera los privilegios de acceso a tablas, vistas y secuencias.

\dt[S+] [PATRÓN]

Enumera tablas. Cuando anexa S+ al comando, por ejemplo, \dtS+, se incluyen columnas de metadatos adicionales, como description en este caso.

\du

Enumera los usuarios de la base de datos. Incluye su nombre y sus roles, como superusuario y atributos.

\dv[S+] [PATRÓN]

Enumera vistas. Incluye datos de propietario, esquema y tipo. Cuando anexa S+ al comando, por ejemplo, \dvS+, se incluyen columnas de metadatos adicionales.

\H

Activa la salida HTML. Esto resulta útil para devolver rápidamente los resultados formateados. Por ejemplo, select * from sales; \H devuelve los resultados de la tabla de ventas, en HTML. Para volver a los resultados tablulares, utilice \q, o inactividad.

\i

Ejecuta comandos desde un archivo. Por ejemplo, si se asume que tiene rsql_steps.sql en el directorio de trabajo, lo siguiente ejecuta los comandos en el archivo: \i rsql_steps.sql.

\l[+] [PATRÓN]

Enumera bases de datos. Incluye propietario, codificación e información adicional.

\q

La inactividad, o comando \q, cierra la sesión de la base de datos y cierra de RSQL.

\sv[+] VIEWNAME

Muestra la definición de una vista.

\timing

Muestra el tiempo de ejecución, para una consulta, por ejemplo.

\z [PATRÓN]

El mismo resultado que \dp.

\?

Muestra información de ayuda. El parámetro opcional especifica el elemento que se va a explicar.

\EXIT

Cierra la sesión de todas las sesiones de base de datos y cierra Amazon Redshift RSQL. Además puede especificar un código de salida opcional. Por ejemplo, \EXIT 15 saldrá de la terminal de Amazon Redshift RSQL y devolverá el código de salida 15.

En el siguiente ejemplo, se muestra el resultado de una conexión y la salida de RSQL.

% rsql -D testuser DSN Connected DBMS Name: Amazon Redshift Driver Name: Amazon Redshift ODBC Driver Driver Version: 1.4.34.1000 Rsql Version: 1.0.1 Redshift Version: 1.0.29306 Type "help" for help. (testcluster) user1@dev=# \exit 15 % echo $? 15

\EXPORT

Especifica el nombre de un archivo de exportación que RSQL utiliza para almacenar la información de la base de datos que devuelve una instrucción SQL SELECT posterior.

export_01.sql

\export report file='E:\\accounts.out' \rset rformat off \rset width 1500 \rset heading "General Title" \rset titledashes on select * from td_dwh.accounts; \export reset

Salida de la consola

Rformat is off. Target width is 1500. Heading is set to: General Title Titledashes is on. (exported 40 rows)

\LOGON

Se conecta a una base de datos. Puede especificar parámetros de conexión mediante sintaxis posicional o como cadena de conexión.

La sintaxis de comandos es la siguiente: \logon {[DBNAME|- USERNAME|- HOST|- PORT|- [PASSWORD]] | conninfo}

DBNAME es el nombre de la base de datos a la que se debe conectar. USERNAME es el nombre de usuario para contectarse. El HOST predeterminado es localhost. El PORT predeterminado es 5439.

Cuando se especifica un nombre de host en un comando \LOGON, se convierte en el nombre de host predeterminado para agregar comandos \LOGON adicionales. Para cambiar el nombre de host predeterminado, especifique un nuevo HOST en un comando \LOGON adicional.

A continuación se muestra el resultado de ejemplo del comando \LOGON para user1.

(testcluster) user1@redshiftdb=# \logon dev DBMS Name: Amazon Redshift Driver Name: Amazon Redshift ODBC Driver Driver Version: 1.4.27.1000 Rsql Version: 1.0.1 You are now connected to database "dev" as user "user1". (testcluster) user1@dev=#

Resultados de ejemplo de para user2.

(testcluster) user1@dev=# \logon dev user2 testcluster2.example.com Password for user user2: DBMS Name: Amazon Redshift Driver Name: Amazon Redshift ODBC Driver Driver Version: 1.4.27.1000 Rsql Version: 1.0.1 You are now connected to database "dev" as user "user2" on host "testcluster2.example.com" at port "5439". (testcluster2) user2@dev=#

\REMARK

Ampliación del comando \echo. \REMARK imprime la cadena especificada en el flujo de salida. \REMARK amplía \echo agregando la capacidad de dividir la salida en líneas separadas.

En el siguiente ejemplo, se muestra la salida desde el comando.

(testcluster) user1@dev=# \remark 'hello//world' hello world

\RSET

El comando \rset establece parámetros de comando y variables. \rset tiene un modo interactivo y otro por lotes. No admite opciones como opciones bash, como -x, o argumentos; por ejemplo, --<arg>.

Establece variables, como las siguientes:

  • ERRORLEVEL

  • HEADING y RTITLE

  • RFORMAT

  • MAXERROR

  • TITLEDASHES

  • WIDTH

En el siguiente ejemplo, se especifica un encabezado.

\rset heading "Winter Sales Report"

Para obtener más ejemplos de cómo utilizar \rset, puede encontrar varios en los temas de Variables de Amazon Redshift RSQL.

\RUN

Ejecuta el script de Amazon Redshift RSQL contenido en el archivo especificado. \RUN amplía el comando \i agregando una opción para omitir líneas de encabezado en un archivo.

Si el nombre del archivo incluye una coma, un punto y coma o un espacio, colóquelo entre comillas simples. Además, si hay texto después del nombre del archivo, colóquelo entre comillas. En UNIX, los nombres de los archivos distinguen mayúsculas de minúsculas. En Windows, los nombres de los archivos distinguen entre mayúsculas y minúsculas.

En el siguiente ejemplo, se muestra la salida desde el comando.

(testcluster) user1@dev=# \! cat test.sql select count(*) as lineitem_cnt from lineitem; select count(*) as customer_cnt from customer; select count(*) as orders_cnt from orders; (testcluster) user1@dev=# \run file=test.sql lineitem_cnt -------------- 4307207 (1 row) customer_cnt -------------- 37796166 (1 row) orders_cnt ------------ 0 (1 row) (testcluster) user1@dev=# \run file=test.sql skip=2 2 records skipped in RUN file. orders_cnt ------------ 0 (1 row)

\OS

Un alias para el comando \!. \OS ejecuta el comando del sistema operativo que se pasa como parámetro. El control vuelve a Amazon Redshift RSQL después de ejecutar el comando. Por ejemplo, puede ejecutar el siguiente comando para imprimir la hora de la fecha actual del sistema y volver al terminal RSQL: \os date.

(testcluster) user1@dev=# \os date Tue Sep 7 20:47:54 UTC 2021

\GOTO

Un nuevo comando para Amazon Redshift RSQL. \GOTO omite todos los comandos que intervienen y reanuda el procesamiento en el \LABEL especificado. El \LABEL debe ser una referencia anticipada. No puede saltar a un \LABEL que precede léxicamente al \GOTO.

A continuación se muestra una salida de ejemplo.

(testcluster) user1@dev=# \! cat test.sql select count(*) as cnt from lineitem \gset select :cnt as cnt; \if :cnt > 100 \goto LABELB \endif \label LABELA \remark 'this is label LABELA' \label LABELB \remark 'this is label LABELB' (testcluster) user1@dev=# \i test.sql cnt --------- 4307207 (1 row) \label LABELA ignored \label LABELB processed this is label LABELB

\LABEL

Un nuevo comando para Amazon Redshift RSQL. \LABEL establece un punto de entrada para ejecutar el programa, como objetivo de un comando \GOTO.

En el siguiente ejemplo, se muestra un ejemplo de salida del comando.

(testcluster) user1@dev=# \! cat test.sql select count(*) from lineitem limit 5; \goto LABELB \remark "this step was skipped by goto label"; \label LABELA \remark 'this is label LABELA' \label LABELB \remark 'this is label LABELB' (testcluster) user1@dev=# \i testgoto.sql count 4307193 (1 row) \label LABELA ignored \label LABELB processed this is label LABELB

\IF (\ELSEIF, \ELSE, \ENDIF)

\IF y los comandos relacionados ejecutan de forma condicional partes del script de entrada. Extensión de comando \if (\elif, \else, \endif) de PSQL. \IF y \ELSEIF admiten expresiones booleanas, incluidas las condiciones AND, OR y NOT.

En el siguiente ejemplo, se muestra un ejemplo de salida desde el comando.

(testcluster) user1@dev=# \! cat test.sql SELECT query FROM stv_inflight LIMIT 1 \gset select :query as query; \if :query > 1000000 \remark 'Query id is greater than 1000000' \elseif :query = 1000000 \remark 'Query id is equal than 1000000' \else \remark 'Query id is less than 1000000' \endif (testcluster) user1@dev=# \i test.sql query -------- 994803 (1 row) Query id is less than 1000000

Use ERRORCODE en su lógica de ramificación.

\if :'ERRORCODE' = '00000' \remark 'The statement was executed without error' \else \remark :LAST_ERROR_MESSAGE \endif

Use \GOTO dentro de un bloque \IF para controlar cómo se ejecuta el código.