hive按当天日期建立分区表 | 动态往日期分区插入数据

hive建立分区表,以当天日期(“2014-08-15”)作为分区依据,hql如下:

CREATE EXTERNAL TABLE IF NOT EXISTS product_sell(
category_id BIGINT,
province_id BIGINT,
product_id BIGINT,
price DOUBLE,
sell_num BIGINT
)
PARTITIONED BY (ds string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

然后以日期作为分区依据,插入数据,shell脚本如下:

#!/bin/bash
source /etc/profile;

yesterday=$(date -d '-1 day' '+%Y-%m-%d')
lastweek=$(date -d '-1 week' '+%Y-%m-%d')

/usr/local/cloud/hive/bin/hive<<EOF 
INSERT OVERWRITE TABLE product_sell PARTITION (ds='$yesterday') select a.category_id, b.good_receiver_province_id as province_id, a.id as product_id, (b.sell_amount/b.sell_num) as price, b.sell_num from product a join (select si.product_id, s.good_receiver_province_id, sum(si.order_item_amount) sell_amount, sum(si.order_item_num) sell_num from so_item si join so s on (si.order_id=s.id) where si.is_gift=0 and si.is_hidden=0 and si.ds between '$lastweek' and '$yesterday' group by s.good_receiver_province_id, si.product_id) b on (a.id=b.product_id);
EOF

这个部分难点在于hive中不知道如何调用形如shell日期变量的方式创建日期分区,mark一下!

<think>嗯,用户想了解如何使用StarRocks向Hive分区表插入数据的方法和示例。首先,我需要回忆一下StarRocks和Hive的集成方式。根据引用[3],SparkSQL可以通过访问Hive的MetaStore来操作Hive表,那StarRocks应该也有类似的机制。不过StarRocks本身是OLAP数据库,可能主要支持数据查询而不是直接Hive。 接下来,看看用户提到的引用内容。引用[1]提到StarRocks的Internal Catalog管理内部数据,而引用[2]是关于Broker Load导入数据,支持撤销操作。引用[3]则指出SparkSQL整合Hive需要MetaStore的支持。可能用户需要的是通过外部Catalog的方式访问Hive表,然后通过数据导入的方式将数据插入Hive分区表中。 StarRocks支持创建External Catalog来访问Hive表,但默认情况下,StarRocks主要作为查询引擎,数据入可能需要借助其他工具。比如,使用Broker Load将数据导出到HDFS,然后通过Hive的LOAD DATA命令加载分区。或者,使用INSERT OVERWRITE DIRECTORY将查询结果导出到Hive表所在的位置,再刷新Hive分区数据。 另外,用户的问题可能涉及到数据从StarRocks到Hive的迁移或同步。这时候可能需要结合Hive的外部表功能,将数据存储在HDFS或对象存储中,然后通过ALTER TABLE ADD PARTITION来添加分区。需要注意的是,StarRocks本身不支持直接向Hive插入数据,可能需要通过中间步骤,如导出数据文件到Hive表的存储路径,并更新分区信息。 还要考虑分区表动态分区和静态分区处理。如果是静态分区,可以在导出时指定路径;如果是动态分区,可能需要生成相应的分区目录结构。同时,确保Hive Metastore服务可用,并且StarRocks配置正确访问Hive的元数据,如引用[3]提到的配置hive-site.xml。 总结可能的步骤:1. 在StarRocks中创建Hive的外部Catalog;2. 使用Broker Load或导出查询结果到Hive表对应的存储路径;3. 在Hive中执行分区刷新命令。需要给出具体的SQL示例和配置说明,确保用户能够操作。</think>### 使用StarRocks向Hive分区表插入数据的方法 #### 1. 通过External Catalog实现数据互通 StarRocks支持通过**External Catalog**访问Hive数据[^1][^3],但直接Hive分区表需结合数据导出流程: ```sql -- 创建Hive External Catalog CREATE EXTERNAL CATALOG hive_catalog PROPERTIES ( "type" = "hive", "hive.metastore.uris" = "thrift://hive-metastore-host:9083" ); ``` #### 2. 使用Broker Load导出数据Hive表路径 通过将StarRocks数据导出到Hive表存储路径(如HDFS/S3),再手动刷新Hive分区: ```sql -- 导出数据Hive表路径 INSERT OVERWRITE DIRECTORY "hdfs://path/to/hive_table/" FORMAT AS "parquet" SELECT col1, col2, partition_col FROM starrocks_table; -- Hive中刷新分区 ALTER TABLE hive_table ADD PARTITION (dt='2023-10-01'); ``` 需注意文件路径需符合Hive分区格式,如`/path/table/dt=2023-10-01/`。 #### 3. 结合SparkSQL中转入(推荐) 通过SparkSQL作为中间层实现数据流转: ```python # 读取StarRocks数据 df = spark.read.format("starrocks") .option("starrocks.table.identifier", "db.table") .load() # Hive分区表 df.write.partitionBy("dt").mode("append").saveAsTable("hive_db.hive_table") ``` 需配置Spark连接StarRocks和Hive的元数据服务[^3]。 #### 4. 直接Hive外部表 若Hive表使用外部存储(如HDFS/S3): ```sql -- StarRocks中生成Hive表格式文件 INSERT INTO FILES("path"="s3://bucket/hive_table/dt=2023-10-01/", "format"="parquet") SELECT col1, col2 FROM starrocks_table; ``` 需保证文件路径与Hive分区结构完全匹配。 ### 关键注意事项 1. **元数据同步**:入后需在Hive中执行`MSCK REPAIR TABLE`刷新分区 2. **权限配置**:确保StarRocks有Hive表存储路径的入权限 3. **格式一致性**:导出文件格式需与Hive表定义匹配(Parquet/ORC等)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值