Una forma sencilla de listar las particiones de una tabla es la siguiente:
SELECT concat(cast(year as varchar), '-', cast(month as varchar), '-', cast(day as varchar)) AS partition_values
FROM nombre_del_esquema.nombre_de_la_tabla
GROUP BY year, month, day
ORDER BY year, month, day;
Para obtener la lista de particiones para un conjunto de tablas podemos usar la cl谩usula UNI脫N:
SELECT 'tabla1' AS table_name, concat(cast(year as varchar), '-', cast(month as varchar), '-', cast(day as varchar)) AS partition_values
FROM tabla1
GROUP BY year, month, day
UNION
SELECT 'tabla2' AS table_name, concat(cast(year as varchar), '-', cast(month as varchar), '-', cast(day as varchar)) AS partition_values
FROM tabla2
GROUP BY year, month, day
UNION
SELECT 'tabla3' AS table_name, concat(cast(year as varchar), '-', cast(month as varchar), '-', cast(day as varchar)) AS partition_values
FROM tabla3
GROUP BY year, month, day
ORDER BY year, month, day;
SELECT t.table_name,
p.partition_ordinal_position,
MAX(CASE WHEN c.column_name = 'year' THEN p.partition_value END) as year,
MAX(CASE WHEN c.column_name = 'month' THEN p.partition_value END) as month,
MAX(CASE WHEN c.column_name = 'day' THEN p.partition_value END) as day,
SUM(stats.number_of_rows) as row_count
FROM information_schema.tables t
INNER JOIN information_schema.columns c ON t.table_catalog = c.table_catalog
AND t.table_schema = c.table_schema
AND t.table_name = c.table_name
INNER JOIN information_schema.partitions p ON t.table_catalog = p.table_catalog
AND t.table_schema = p.table_schema
AND t.table_name = p.table_name
INNER JOIN (SELECT table_schema,
table_name,
partition_name,
CAST(SPLIT_PART(statistics, ',', 1) AS BIGINT) AS number_of_rows
FROM information_schema.partition_statistics) stats ON t.table_schema = stats.table_schema
AND t.table_name = stats.table_name
AND p.partition_name = stats.partition_name
WHERE t.table_schema = 'pre_us_gravity_snapshots'
GROUP BY t.table_name,
p.partition_ordinal_position,
year,
month,
day
ORDER BY t.table_name,
CAST(year AS INTEGER),
CAST(month AS INTEGER),
CAST(day AS INTEGER),
p.partition_ordinal_position;
En esta consulta se utilizan las vistas de information_schema para obtener informaci贸n sobre las tablas y particiones de la base de datos. Primero se realiza una uni贸n entre las tablas information_schema.tables, information_schema.columns, information_schema.partitions y information_schema.partition_statistics para obtener la informaci贸n necesaria.
Luego, se utiliza una cl谩usula CASE en cada una de las particiones para separar el valor de los campos year, month y day en columnas distintas. De esta manera, se puede obtener la informaci贸n de partici贸n en columnas separadas en lugar de tenerlos agrupados en una sola columna.
Finalmente, se utiliza la funci贸n SUM() en la columna number_of_rows de la vista information_schema.partition_statistics para obtener el recuento real de filas de cada partici贸n.
La consulta utiliza la cl谩usula GROUP BY para agrupar los resultados por la tabla, la posici贸n ordinal de la partici贸n, el a帽o, el mes y el d铆a. La cl谩usula ORDER BY se utiliza para ordenar los resultados por tabla, a帽o, mes, d铆a y posici贸n ordinal de la partici贸n, asegurando que los resultados se presenten en el orden deseado.
0 comentarios:
Publicar un comentario
Gracias por participar en esta p谩gina.