El almacenamiento por niveles de MaxCompute incluye almacenamiento estándar, almacenamiento de baja frecuencia y almacenamiento a largo plazo. De forma predeterminada, los datos se guardan en almacenamiento estándar. Según la frecuencia de acceso a los datos, puede cambiar el tipo de almacenamiento de tablas o particiones específicas a almacenamiento de baja frecuencia o a largo plazo. Esta práctica, conocida como separación de datos calientes y fríos, le ayuda a reducir los costos de almacenamiento.
Tipos de almacenamiento por niveles
|
Tipo |
Descripción |
|
standard storage |
Tipo de almacenamiento predeterminado. Es adecuado para datos con acceso frecuente que requieren operaciones de lectura y escritura constantes. |
|
low-frequency storage |
Adecuado para datos con acceso poco frecuente. Esto le permite reducir eficazmente los costos de almacenamiento. Nota
|
|
long-term storage |
Facturación
Para obtener más información sobre la facturación del almacenamiento, consulte Storage fee.
-
Al utilizar almacenamiento de baja frecuencia o a largo plazo, considere el volumen y la frecuencia de acceso a los datos. Un volumen alto o un acceso frecuente puede costar más que el uso de almacenamiento estándar.
El costo de realizar un escaneo completo de tabla en una tabla o partición en almacenamiento de baja frecuencia una vez al mes equivale al costo de mantenerla en almacenamiento estándar.
El costo de realizar un escaneo completo de tabla en una tabla o partición en almacenamiento a largo plazo una vez cada seis meses equivale al costo de mantenerla en almacenamiento estándar.
Inicie sesión en la consola Billing Management. En la página , puede consultar las tarifas correspondientes a los distintos tipos de almacenamiento. Los conceptos facturables para almacenamiento estándar, almacenamiento de baja frecuencia y almacenamiento a largo plazo se denominan Storage, Tiered Storage-Low-Frequency y Long-Term Storage, respectivamente. Para obtener instrucciones detalladas, consulte View bill details.
Notas de uso
Disponibilidad por región: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), China (Shanghai) Finance, China (Beijing) Finance, China (Shenzhen) Finance, Singapore, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Japan (Tokyo), Germany (Frankfurt) y US (Silicon Valley).
Actualmente, Hologres no puede acceder directamente a los datos en almacenamiento de baja frecuencia y a largo plazo. Además, cuando Hologres lee directamente desde MaxCompute, el campo
last_access_timede la tabla o partición de MaxCompute no se actualiza. Por lo tanto, cuando establece una regla de ciclo de vida de almacenamiento por niveles que utiliza la condiciónlast_access_time, algunas tablas o particiones que son leídas continuamente solo por Hologres también podrían coincidir con la regla.
Configurar tipos de almacenamiento
Puede transicionar datos entre diferentes tipos de almacenamiento. Modificar el tipo de almacenamiento no afecta el acceso a los datos.
La siguiente tabla describe las transiciones entre tipos de almacenamiento.
|
Transición |
Descripción |
|
standard storage -> low-frequency storage |
Se admiten transiciones manuales y automáticas. No se genera ningún costo de acceso de E/S. La "Hora de última modificación" y la "Hora de último acceso" de la tabla o partición no se actualizan. |
|
standard storage -> long-term storage |
|
|
low-frequency storage -> long-term storage |
Se admiten transiciones manuales y automáticas. Las transiciones manuales generan un costo de acceso de E/S, mientras que las automáticas no. La "Hora de última modificación" y la "Hora de último acceso" de la tabla o partición no se actualizan. |
|
low-frequency storage -> standard storage |
Solo se admiten transiciones manuales. Se genera un costo de acceso de E/S. La "Hora de última modificación" y la "Hora de último acceso" de la tabla o partición se actualizan. |
|
long-term storage -> low-frequency storage |
|
|
long-term storage -> standard storage |
Configuración manual
Puede establecer manualmente el tipo de almacenamiento de una tabla no particionada o de una partición en almacenamiento de baja frecuencia o a largo plazo. El cambio surte efecto de inmediato.
Formato del comando
ALTER TABLE <TABLE_NAME> [PARTITION(<PARTITION_SPEC>)]
SET <TBLPROPERTIES|PARTITIONPROPERTIES>("storagetier"="standard|lowfrequency|longterm");
Parámetros
TABLE_NAME: Obligatorio. Nombre de la tabla cuyo tipo de almacenamiento desea modificar, o nombre de la tabla particionada que contiene la partición destino.
PARTITION_SPEC: Obligatorio si va a modificar el tipo de almacenamiento de una partición.
-
TBLPROPERTIES|PARTITIONPROPERTIES: Especifica si se debe modificar el tipo de almacenamiento de una tabla o de una partición.
TBLPROPERTIES: Modifica el tipo de almacenamiento de una tabla.
PARTITIONPROPERTIES: Modifica el tipo de almacenamiento de una partición.
-
storagetier: Obligatorio. Tipo de almacenamiento por niveles. Valores válidos:
standard: almacenamiento estándar. Solo se cobran tarifas de almacenamiento.
lowfrequency: almacenamiento de baja frecuencia. Se cobran tanto tarifas de almacenamiento como tarifas de acceso a datos para almacenamiento de baja frecuencia.
longterm: almacenamiento a largo plazo. Se cobran tanto tarifas de almacenamiento como tarifas de acceso a datos para almacenamiento a largo plazo.
Solo puede establecer el tipo de almacenamiento por niveles para particiones dentro de una tabla particionada. No puede establecer el tipo de almacenamiento por niveles para una tabla particionada completa.
Ejemplos
-
Ejemplo 1: Establecer el tipo de almacenamiento de una tabla no particionada en almacenamiento de baja frecuencia.
ALTER TABLE tablename SET TBLPROPERTIES("storagetier"="lowfrequency");Consulte las propiedades de la tabla. Puede revisar el campo
StorageTierpara confirmar el tipo de almacenamiento actual.--View table properties DESC extended tablename; ---Sample output +-------------------------------------------------------------------+ | Owner: ALIYUN$mofan_****@test.aliyunid.com | | Project: mf_mc_**** | | TableComment: | +-------------------------------------------------------------------+ | CreateTime: 2021-11-18 15:14:00 | | LastDDLTime: 2023-09-11 14:34:55 | | LastModifiedTime: 2023-09-13 15:02:28 | | LastAccessTime: 2023-09-14 10:50:57 | +-------------------------------------------------------------------+ | InternalTable: YES | Size: 1923683131 | +-------------------------------------------------------------------+ | Native Columns: | +-------------------------------------------------------------------+ | Field| Type| Label |ExtendedLabel| Nullable| DefaultValue|Comment | +-------------------------------------------------------------------+ | empno | bigint | | | true | NULL | | | ename | string | | | true | NULL | | | job | string | | | true | NULL | | | mgr | bigint | | | true | NULL | | | hiredate | datetime | | | true | NULL | | | sal | bigint | | | true | NULL | | | comm | bigint | | | true | NULL | | | deptno | bigint | | | true | NULL | | +-------------------------------------------------------------------+ | Extended Info: | +-------------------------------------------------------------------+ | TableID: 8e0cc78c81ab4ad7af30bff7a8e**** | | IsArchived: false | | PhysicalSize: 5771049393 | | FileNum: 3 | | StoredAs: AliOrc | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | | StorageTier: lowfrequency | | StorageTierLastModifiedTime: 2023-09-11 14:34:55 | +-------------------------------------------------------------------+ -
Ejemplo 2: Establecer el tipo de almacenamiento de una partición en la tabla particionada bank_data_pt en almacenamiento de baja frecuencia.
ALTER TABLE bank_data_pt PARTITION (credit='yes') SET PARTITIONPROPERTIES ("storagetier" = 'lowfrequency');Puede revisar el campo
StorageTieren las propiedades de la partición para determinar el tipo de almacenamiento actual.--View partition properties DESC extended bank_data_pt PARTITION(credit='yes'); --Sample output +------------------------------------------------------------------------------------+ | PartitionSize: 0 | +------------------------------------------------------------------------------------+ | CreateTime: 2024-05-10 10:28:16 | | LastDDLTime: 2024-05-10 10:31:01 | | LastModifiedTime: 2024-05-10 10:28:16 | +------------------------------------------------------------------------------------+ | IsExstore: false | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | ColdStorageStatus: N/A | | StorageTier: lowfrequency | | StorageTierLastModifiedTime: 2024-05-10 10:31:01 | +------------------------------------------------------------------------------------+
Configuración automatizada
Puede configurar reglas de ciclo de vida para el almacenamiento por niveles a nivel de proyecto o de tabla particionada para automatizar las transiciones de tipo de almacenamiento.
-
Configuración a nivel de proyecto:
Una regla a nivel de proyecto sirve como valor predeterminado para todas las tablas no particionadas y para las particiones en tablas que no tienen reglas específicas. Las tablas y particiones coincidentes transicionan automáticamente.
-
Configuración a nivel de tabla particionada:
Una regla establecida para una tabla particionada específica tiene prioridad sobre cualquier regla a nivel de proyecto. Cuando alguna partición de esta tabla cumple con los criterios de la regla, la partición transiciona automáticamente al tipo de almacenamiento correspondiente.
Limitaciones clave
No se pueden configurar reglas a un nivel más granular:
No puede establecer una regla independiente para una sola tabla no particionada. Esta hereda la regla a nivel de proyecto.
No puede establecer una regla independiente para una partición específica dentro de una tabla particionada. Esta hereda la regla de su tabla particionada principal.
Ejecución de reglas
Si una tabla o partición cumple con los criterios de ciclo de vida tanto para almacenamiento a largo plazo (longterm) como para almacenamiento de baja frecuencia (lowfrequency), se convierte a
longtermcon prioridad.Si una tabla o partición cumple primero con la regla de ciclo de vida
lowfrequency, se convierte alowfrequency. Si posteriormente cumple con la reglalongterm, se convierte alongterm. En este caso, la conversión delowfrequencyalongtermno genera una tarifa de acceso delowfrequency. Para obtener detalles sobre la facturación, consulte Tiered Storage Billing.La plataforma busca el cumplimiento de las reglas dos veces al día. Por lo tanto, puede haber un retraso entre el momento en que una tabla o partición cumple con las condiciones y el momento en que ocurre la transición.
Formato del comando
-
Establecer una regla de ciclo de vida a nivel de proyecto
SETPROJECT odps.table.lifecycle.config=<lifecycle_config_json_string>;También puede configurar esto en la consola de MaxCompute:
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
En la página Projects, haga clic en Manage en la columna Actions del proyecto objetivo.
En la página Project Settings, haga clic en la pestaña Parameter Configuration.
En la sección Lifecycle Configuration, haga clic en Edit.
-
Configure los parámetros Last Access Configuration Policy y Last Modified Configuration Policy.
Last Access Configuration Policy: Corresponde al parámetro
DaysAfterLastAccessGreaterThan.Last Modified Configuration Policy: Corresponde al parámetro
DaysAfterLastModificationGreaterThan.
-
Establecer una regla de ciclo de vida para una tabla particionada
-
Establecer durante la creación de la tabla:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> [PRIMARY KEY (<pk_col_name>, <pk_col_name2>),(<col_name> <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...)] PARTITIONED BY (<col_name> <data_type> [comment <col_comment>], ...) tblproperties ('lifecycle_config' = '<lifecycle_config_json_string>') ; -
Modificar una tabla existente:
ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES ('lifecycle_config' = '<lifecycle_config_json_string>');
-
-
Consultar la configuración de ciclo de vida de almacenamiento por niveles de una tabla particionada
SHOW CREATE TABLE <table_name>;
Parámetros
La siguiente tabla describe los parámetros clave. Para obtener información sobre otros parámetros, consulte Common parameters.
lifecycle_config_json_string:
-
Al establecer una regla de ciclo de vida a nivel de proyecto, la definición es la siguiente.
{ "TierToLowFrequency": { "DaysAfterLastModificationGreaterThan": <days>, // Transition if days since last modification exceeds this value. "DaysAfterLastAccessGreaterThan": <days>, // Transition if days since last access exceeds this value. }, "TierToLongterm": { "DaysAfterLastModificationGreaterThan": <days>, "DaysAfterLastAccessGreaterThan": <days> } // Each condition is optional. Multiple conditions are combined with an OR relationship. } -
Al establecer una regla de ciclo de vida para una tabla particionada, la definición es la siguiente.
{ \"TierToLowFrequency\": { \"DaysAfterLastModificationGreaterThan\": <days>, // Transition if days since last modification exceeds this value. \"DaysAfterLastAccessGreaterThan\": <days>, // Transition if days since last access exceeds this value. }, \"TierToLongterm\": { \"DaysAfterLastModificationGreaterThan\": <days>, \"DaysAfterLastAccessGreaterThan\": <days> } // Each condition is optional. Multiple conditions are combined with an OR relationship. } TierToLowFrequency: Identificador para almacenamiento de baja frecuencia.
TierToLongterm: Identificador para almacenamiento a largo plazo.
DaysAfterLastModificationGreaterThan: Número de días posteriores a la hora de última modificación (LastModifiedTime) antes de que los datos transicionen automáticamente.
-
DaysAfterLastAccessGreaterThan: Número de días posteriores a la hora de último acceso (LastAccessTime) antes de que los datos transicionen automáticamente. Si el campo LastAccessTime de una tabla o partición está vacío, se aplican las siguientes reglas:
Para tablas o particiones creadas antes del 1 de octubre de 2023, la hora se calcula de forma predeterminada según la zona horaria UTC+0, por ejemplo,
2023.10.01 00:00:00.Para tablas o particiones creadas el 1 de octubre de 2023 o después, si nunca se ha accedido a los datos, el cálculo se basa en su hora de creación (CreateTime).
Ejemplos
-
Ejemplo 1: Establecer una regla de ciclo de vida a nivel de proyecto.
setproject odps.table.lifecycle.config={"TierToLongterm":{"DaysAfterLastAccessGreaterThan":180},"TierToLowFrequency":{"DaysAfterLastAccessGreaterThan":120}}; -
Ejemplo 2: Eliminar una configuración de ciclo de vida a nivel de proyecto.
setproject odps.table.lifecycle.config=; -
Ejemplo 3: Establecer una regla de ciclo de vida para una tabla particionada.
-- Set during table creation CREATE TABLE lifecycle_part_t (key string) PARTITIONED BY (ds STRING) tblproperties ('lifecycle_config' = '{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 2,\"DaysAfterLastAccessGreaterThan\": 2},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 4,\"DaysAfterLastAccessGreaterThan\": 7}}') ; -- Modify an existing table ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 90,\"DaysAfterLastAccessGreaterThan\": 30},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 180,\"DaysAfterLastAccessGreaterThan\": 7}}'); -
Ejemplo 4: Eliminar la configuración de ciclo de vida de almacenamiento por niveles de una tabla particionada.
ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{}');
Control de acceso a nivel de tabla
Después de mover una tabla o partición a almacenamiento de baja frecuencia o a largo plazo, acceder a sus datos genera una tarifa de acceso a datos.
De forma predeterminada, cualquier usuario con permiso SELECT en una tabla puede acceder a sus datos, independientemente del tipo de almacenamiento. MaxCompute proporciona controles de acceso a nivel de tabla independientes para almacenamiento de baja frecuencia y a largo plazo. Cuando esta función está habilitada, el permiso SELECT solo otorga acceso a datos en almacenamiento estándar. Acceder a datos en almacenamiento de baja frecuencia o a largo plazo requiere permisos explícitos adicionales para esos tipos de almacenamiento. Esto ayuda a prevenir el acceso no intencionado a datos fríos y evita sobrecostos inesperados.
En comparación con el filtrado de datos de partición mediante control de acceso a nivel de fila, que filtra silenciosamente las particiones no autorizadas, este método provoca que una consulta falle inmediatamente si intenta acceder a una partición fría sin permiso. Esto evita que los resultados de cálculo sean inesperadamente inexactos debido a datos faltantes.
Modelo de permisos
Interruptor global: Esta función se puede habilitar o deshabilitar a nivel de inquilino y está deshabilitada de forma predeterminada. Cuando está deshabilitada, el comportamiento coincide con el modelo existente, donde el permiso SELECT es suficiente para acceder a datos en todos los tipos de almacenamiento.
Granularidad de permisos: Los permisos se controlan a nivel de tabla. Cuando otorga permisos sobre una tabla particionada, estos se aplican a todas las particiones dentro de esa tabla.
Directiva de autorización: Después de habilitar el interruptor, acceder a datos en almacenamiento de baja frecuencia o a largo plazo requiere tanto el permiso SELECT en la tabla como el permiso de acceso correspondiente para el tipo de almacenamiento. El acceso a datos en almacenamiento estándar no se ve afectado.
|
Objeto |
Acciones |
Descripción |
Método de autorización |
|
Tabla |
ReadLowfrequencyStorage |
Permite leer datos de una tabla o partición en almacenamiento de baja frecuencia ( |
ACL, Policy |
|
Tabla |
ReadLongtermStorage |
Permite leer datos de una tabla o partición en almacenamiento a largo plazo ( |
ACL, Policy |
Combinaciones de permisos
La siguiente tabla muestra los resultados de acceso para un usuario con permiso SELECT en una tabla después de habilitar el interruptor de control de acceso.
|
Permisos existentes |
Almacenamiento estándar |
Almacenamiento de baja frecuencia |
Almacenamiento a largo plazo |
|
SELECT |
Permitido |
Denegado |
Denegado |
|
SELECT + ReadLowfrequencyStorage |
Permitido |
Permitido |
Denegado |
|
SELECT + ReadLongtermStorage |
Permitido |
Denegado |
Permitido |
|
SELECT + ReadLowfrequencyStorage + ReadLongtermStorage |
Permitido |
Permitido |
Permitido |
Limitaciones
El interruptor es a nivel de inquilino. Una vez habilitado, afecta a todos los proyectos y a todas las tablas y particiones que ya se encuentran en almacenamiento de baja frecuencia o a largo plazo dentro del inquilino. Antes de habilitar el interruptor, revise y otorgue los permisos necesarios para los trabajos existentes a fin de evitar interrupciones del servicio.
Los propietarios de tablas, propietarios de proyectos, propietarios de esquemas y usuarios con el rol Super_Administrator o Admin tienen los permisos requeridos de forma predeterminada y no necesitan que se les otorguen permisos adicionales. También pueden otorgar estos permisos a otros usuarios o roles.
Estos permisos solo controlan la lectura de datos fríos. Para transicionar una tabla o partición de almacenamiento de baja frecuencia o a largo plazo de vuelta a almacenamiento estándar, el usuario aún necesita el permiso ALTER en la tabla.
Para proyectos que tienen habilitada la sintaxis Schema (modelo de tres niveles), debe habilitar la sintaxis de tres niveles a nivel de sesión antes de realizar operaciones de autorización y consulta:
SET odps.namespace.schema=true;.
Procedimiento
Requisitos previos
El interruptor de control de acceso a nivel de inquilino para almacenamiento por niveles está habilitado. Para ello, siga estos pasos:
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
En la pestaña Tenant Property, habilite el interruptor Tenant-level Schema Syntax.
Nota: Después de habilitar el interruptor, los usuarios con solo permiso SELECT ya no podrán acceder a datos en almacenamiento de baja frecuencia o a largo plazo. Otorgue los permisos necesarios con anticipación para evitar que fallen los trabajos existentes.
Paso 1: Comprobar el tipo de almacenamiento
El campo StorageTier en las propiedades de la tabla o partición especifica el tipo de almacenamiento actual. Solo los datos almacenados en niveles de baja frecuencia (lowfrequency) o a largo plazo (longterm) están sujetos a restricciones de permisos.
-- View table properties
DESC EXTENDED <table_name>;
-- View partition properties
DESC EXTENDED <table_name> PARTITION(<partition_spec>);
Paso 2: Otorgar permisos de acceso
Método 1: Autorización ACL
Utilice este método para una autorización precisa en una sola tabla. Puede otorgar permisos a un usuario o a un rol.
-
Formato del comando
GRANT ReadLowfrequencyStorage|ReadLongtermStorage ON TABLE <table_name> TO USER <user_name>|ROLE <role_name>; -
Parámetros
Parámetro
Obligatorio
Descripción
table_name
Sí
Nombre de la tabla que se va a autorizar. Para una tabla particionada, otorgar permisos a nivel de tabla se aplica a todas sus particiones.
user_name
Elija uno
El usuario autorizado es un usuario de rol RAM con el formato
RAM$<AccountName>:role/<RamRoleName>, que debe encerrarse entre comillas simples obackticks.role_name
Elija uno
Rol al que se otorgan permisos. El rol debe crearse y asignarse al usuario objetivo de antemano.
-
Ejemplos
-- Example 1: Grant a user permission to read the low-frequency storage table storage_table_lowfreq. GRANT ReadLowfrequencyStorage ON TABLE table_name TO USER 'RAM$example:role/data_reader'; -- Example 2: Grant read permissions through a role. -- Create a role named data_role and assign it to a user. CREATE ROLE data_role; GRANT data_role TO `RAM$example:role/data_reader`; -- Grant the role permission to read data in low-frequency and long-term storage. GRANT ReadLowfrequencyStorage ON TABLE table_name TO ROLE data_role; GRANT ReadLongtermStorage ON TABLE table_name TO ROLE data_role;
Método 2: Autorización Policy
Utilice este método para autorizaciones masivas. Admite la coincidencia de varias tablas mediante comodines o expresiones regulares y solo puede otorgar permisos a roles.
-
Configurar a través de la consola
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
En la página Projects, haga clic en Manage en la columna Actions del proyecto objetivo.
En la página Project Settings, haga clic en la pestaña Role Permissions y modifique la autorización para el rol objetivo.
-
Establezca Authorization Model en Policy, introduzca el contenido de la directiva en el campo Document y envíe.
Ejemplo de directiva: Otorga a un rol el permiso para leer los datos de almacenamiento de baja frecuencia de todas las tablas que comienzan con
storage_table_lowfreq.{ "Statement": [ { "Action": [ "odps:ReadLowfrequencyStorage" ], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/storage_table_lowfreq*" ] } ], "Version": "1" }
-
Configurar mediante comandos SQL
-- Create a role named data_role and assign it to a user. CREATE ROLE data_role; GRANT data_role TO `RAM$example:role/data_reader`; -- Allow the data_role to read long-term storage data from all tables prefixed with storage_table_longterm. GRANT ReadLongtermStorage ON TABLE table_name_* TO ROLE data_role PRIVILEGEPROPERTIES("policy" = "true", "allow" = "true");
Paso 3: Verificar permisos
Utilice la cuenta autorizada para ejecutar los siguientes comandos y comprobar si los permisos han surtido efecto; luego, acceda a los datos objetivo para verificarlo.
-- View the current user's permissions. ACL and Policy authorizations are displayed in their respective Authorization Type sections.
SHOW GRANTS;
-- Access data in low-frequency or long-term storage.
SELECT * FROM table_name;
Si la autorización es efectiva, la consulta devuelve resultados. De lo contrario, se reporta un error con el siguiente mensaje:
FAILED: ODPS-0130013:Authorization exception - Authorization failed [4009, 4019], You have no privilege 'odps:ReadLowfrequencyStorage' on {acs:odps:*:projects/<project_name>/tables/<table_name>}
Preguntas frecuentes
Restaurar el comportamiento de acceso anterior
Para restaurar el comportamiento original, simplemente deshabilite el interruptor de control de acceso a almacenamiento por niveles a nivel de inquilino. Después de deshabilitarlo, los usuarios con permiso SELECT podrán acceder a datos en todos los tipos de almacenamiento. Cualquier permiso ya otorgado no se verá afectado.
Filtrado de datos de partición
El acceso a datos configurados como almacenamiento de baja frecuencia o de largo plazo genera un costo de acceso. Puede utilizar la función row-level access control junto con GET_PARTITION_META para controlar los permisos sobre los datos en almacenamiento de baja frecuencia o de largo plazo y así gestionar el acceso a dicha información.
GET_PARTITION_META
GET_PARTITION_META es una función especial que solo se puede usar con control de acceso a nivel de fila. No es compatible con consultas SQL estándar.
Sintaxis
struct GET_PARTITION_META(<tableName>, <pt_col1>, <pt_col2>, ..., <pt_col_n>);
Parámetros
|
Parámetro |
Descripción |
|
tableName |
Nombre de la tabla, que debe estar particionada. El valor es de tipo String y admite el formato |
|
pt_col |
Cada parámetro desde pt_col1 hasta pt_col_n corresponde a un nivel de partición de la tabla particionada. Cada parámetro debe ser una referencia de columna. |
Valor de retorno
Devuelve un Struct del tipo struct<storagetier:string>. Esta estructura contiene un único campo String que describe el tipo de almacenamiento de la partición correspondiente.
Notas de uso
Al agregar una directiva de nivel de fila a una tabla, considere el comportamiento de acceso de los usuarios distintos a aquellos bajo control. Si otros usuarios ya acceden a la tabla, debe establecer directivas explícitas para ellos y evitar problemas de filtrado de datos causados por denegaciones de acceso no intencionales. Para obtener más información, consulte row-level access control.
De forma predeterminada, se puede acceder a las tablas de MaxCompute mediante SQL y también a través de motores externos como Spark y Flink. Sin embargo, actualmente solo el motor SQL de MaxCompute es compatible con la función GET_PARTITION_META. Por lo tanto, si utiliza GET_PARTITION_META en una directiva de control de acceso a nivel de fila, únicamente el motor SQL de MaxCompute podrá leer la tabla; los demás motores no podrán acceder a ella.
Además de cumplir con los requisitos de permisos a nivel de fila, el usuario debe contar con el permiso SELECT sobre los datos para poder acceder a ellos.
-
Las condiciones de filtro dentro de GET_PARTITION_META pueden producir diferentes efectos de poda de particiones según el escenario.
-
Las condiciones de filtro se aplican exclusivamente a los campos de partición de una tabla particionada. Por ejemplo, puede permitir el acceso al almacenamiento estándar y exigir que el valor de la partición de primer nivel sea
2024.GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND pt1='2024'Cuando utiliza SQL para acceder a
storage_tabley la cláusula WHERE no contiene una condición de partición, el sistema admite de forma nativa la poda de particiones. Este proceso evita un escaneo completo de la tabla al realizar accesos de solo lectura únicamente en las particiones necesarias destorage_table. -
La condición de filtro incluye un valor de un campo no particionado y se utiliza una operación AND para conectar ambas condiciones. Por ejemplo, una condición que permite el acceso al almacenamiento estándar se combina con
a>100sobre un valor no particionado mediante una operación AND.GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND a > 100Cuando utiliza SQL para acceder a
storage_tablesin una condición de partición en la cláusula WHERE, la poda de particiones sigue siendo compatible y se accede solo a las particiones almacenadas comostandard. -
Los criterios de filtro incluyen un valor de un campo no particionado y ambos criterios se conectan mediante una operación OR. Por ejemplo, una condición que permite el acceso al almacenamiento estándar se combina con el valor no particionado
a>100en una operación OR.get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard') OR a > 100Cuando utiliza SQL para acceder a
storage_table, se presentan dos escenarios:Si la cláusula WHERE no contiene una condición de partición, se escanean todas las particiones en busca de datos que cumplan con
a>100.Si se especifica una condición de partición en la cláusula
WHERE, solo se escanean los datos que cumplen condiciones comostandardoa>100en las particiones correspondientes.
-
Ejemplos
Defina la tabla particionada storage_table.
CREATE TABLE storage_table(a BIGINT, b BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING);
-
Ejemplo 1:
Otorgue al usuario predeterminado el permiso
policy01para acceder a los datos de almacenamiento estándar enstorage_table. Ningún usuario (incluido el Project Owner) podrá acceder a los datos de almacenamiento de baja frecuencia o de largo plazo, y se devolverá un valor vacío.CREATE ROW ACCESS POLICY policy01 ON storage_table TO DEFAULT FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard');El resumen de Logview muestra el siguiente mensaje cuando se activa una directiva de acceso a nivel de fila:
El mensaje
WARNING:[1,15] row access policy is enabled on table yyy_hp_storagetier.storage_table01indica que se activó una directiva de acceso a nivel de fila al consultar la tabla. -
Ejemplo 2:
Otorgue al usuario
user_xel permisopolicy02para acceder a los datos de almacenamiento de baja frecuencia y de largo plazo enstorage_table.CREATE ROW ACCESS POLICY policy02 ON storage_table TO USER (user_x) --You can also grant permissions to a role using TO ROLE rolename, and then assign the role to the user. FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier IN ('lowfrequency','longterm'));Pueden presentarse dos escenarios:
Si se establece el permiso
policy01para la tabla, todos los usuarios excepto user_x pueden acceder a los datos de almacenamiento estándar destorage_table, pero reciben un valor nulo para los datos de almacenamiento de baja frecuencia o de largo plazo. Por su parte, user_x puede acceder a los datos de almacenamiento de baja frecuencia y de largo plazo destorage_table, pero recibe un valor nulo para los datos de almacenamiento estándar.Si no se configura el permiso
policy01para la tabla, se deniega a todos los usuarios excepto a user_x el acceso a cualquier dato enstorage_tabley reciben un valor nulo. El usuario user_x puede acceder a los datos de almacenamiento de baja frecuencia y de largo plazo, pero recibe un valor nulo al intentar acceder a los datos de almacenamiento estándar.
-
Ejemplo 3:
La directiva
policy03otorga al usuariouser_ypermiso de acceso a todos los datos enstorage_table.CREATE ROW ACCESS POLICY policy03 ON storage_table TO USER (user_y) --You can also grant permissions to a role using TO ROLE rolename, and then assign the role to the user. FILTER USING (true); -- The constant 'true' means the user can access all data in the table.Pueden presentarse dos escenarios:
Si se establece el permiso
policy01para la tabla, todos los usuarios (excepto user_y) pueden acceder a los datos de almacenamiento estándar destorage_table, pero no pueden acceder a los datos de almacenamiento de baja frecuencia o de largo plazo, y se devuelve un valor vacío. El usuariouser_ypuede acceder a los datos de todos los tipos de almacenamiento enstorage_table.Si no se establece el permiso
policy01para la tabla, todos los usuarios (excepto user_y) no pueden acceder a ningún dato almacenado enstorage_tabley se devuelve un valor nulo. Solo el usuariouser_ypuede acceder a todos los datos almacenados enstorage_table.