帮我接一个sql脚本,使用hivesql 批量count fdp库下表名开头为db_的表的数据量
时间: 2024-03-12 09:46:13 浏览: 123
检查数据库中表的数量和每张表的数据量
4星 · 用户满意度95%
好的,以下是一个完整的HiveSQL脚本,用于批量统计 fdp 库下表名开头为 db_ 的表的数据量:
```sql
USE fdp;
-- 创建临时表用来存储表名
CREATE TEMPORARY TABLE IF NOT EXISTS tables_to_count AS
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'fdp' AND table_name LIKE 'db_%';
-- 使用动态 SQL 语句批量统计表的数据量
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.dynamic.partition=true;
SET hive.exec.max.dynamic.partitions=100000;
SET hive.exec.max.dynamic.partitions.pernode=100000;
SET hive.exec.max.created.files=100000;
SET mapred.reduce.tasks=8;
SET mapred.map.tasks=8;
SET hive.auto.convert.join=true;
SET hive.optimize.bucketmapjoin=true;
SET hive.optimize.bucketmapjoin.sortedmerge=true;
SET hive.optimize.bucketmapjoin.sortedmerge.bucketmapjoin=true;
SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
SET hive.map.aggr=true;
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=256000000;
SET hive.merge.smallfiles.avgsize=16000000;
SET hive.merge.orcfile.stripe.level=true;
SET hive.merge.orcfile.stripe.level.threshold=0.5;
SET hive.merge.tezfiles=true;
SET hive.merge.smallfiles.avgsize=134217728;
SET hive.merge.size.per.task=1073741824;
SET hive.merge.orcfile.stripe.level=true;
SET hive.merge.orcfile.stripe.level.threshold=0.5;
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET mapred.max.split.size=512000000;
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.enforce.bucketing=true;
SET hive.exec.max.dynamic.partitions=100000;
SET hive.exec.max.dynamic.partitions.pernode=100000;
SET hive.exec.max.created.files=100000;
SET hive.auto.convert.join=true;
SET hive.optimize.bucketmapjoin=true;
SET hive.optimize.bucketmapjoin.sortedmerge=true;
SET hive.optimize.bucketmapjoin.sortedmerge.bucketmapjoin=true;
SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
SET hive.map.aggr=true;
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=256000000;
SET hive.merge.smallfiles.avgsize=16000000;
SET hive.merge.orcfile.stripe.level=true;
SET hive.merge.orcfile.stripe.level.threshold=0.5;
SET hive.merge.tezfiles=true;
SET hive.merge.smallfiles.avgsize=134217728;
SET hive.merge.size.per.task=1073741824;
SET hive.merge.orcfile.stripe.level=true;
SET hive.merge.orcfile.stripe.level.threshold=0.5;
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET mapred.max.split.size=512000000;
-- 构造动态 SQL 语句
SET hivevar:tables_to_count_sql = CONCAT_WS(" UNION ALL ",
SELECT CONCAT("SELECT '", table_name, "' AS table_name, COUNT(*) AS count FROM fdp.", table_name)
FROM tables_to_count
);
-- 执行动态 SQL 语句
SELECT * FROM (${hivevar:tables_to_count_sql}) t;
```
在上面的脚本中,首先创建了一个临时表 `tables_to_count`,用来存储需要统计的表名。然后使用 `CONCAT()` 函数构造了一个动态 SQL 语句,该语句会自动遍历 `tables_to_count` 表中的所有表名,并统计每个表的数据量。最后,执行动态 SQL 语句,并输出结果。
注意,上面的脚本中使用了一些 Hive 的高级特性,如动态 SQL、临时表、变量等。如果您不熟悉这些特性,建议先学习一下 Hive 的基础知识。
阅读全文