从有多个分区列的蜂巢表中获取最新数据
我有一个带有以下结构的蜂巢桌 ID string, Value string, year int, month int, day int, hour int, minute int 此表每15分钟一次刷新一次,并用年/月/天/小时/分钟的列对其进行分区.请在分区中找到以下样品. year=2019/month=12/day=29/hour=19/minute=15 year=2019/month=12/day=30/hour=00/minute=45 year=2019/month=12/day=30/hour=08/minute=45 year=2019/month=12/day=30/hour=09/minute=30 year=2019/month=12/day=30/hour=09/minute=45 我只想从表中选择最新的分区数据.我尝试在这些分区列中使用max()语句,但由于数据大小很大,因此它不是很有效. 请让我知道,如何使用Hive SQL以方便的方式
6 2023-05-24
编程技术问答社区
当使用Hive日期函数而不是硬编码的日期字符串时,Hive查询性能很慢?
我有一个每天更新的交易表table_A.每天,我都会使用file_date字段将新数据插入table_A table_A中,以过滤外部table_B的必要数据以插入table_A.但是,如果我使用硬编码日期与使用Hive Date函数的性能有很大的差异: -- Fast version (~20 minutes) SET date_ingest = '2016-12-07'; SET hive.exec.dynamic.partition.mode = nonstrict; SET hive.exec.dynamic.partition = TRUE; INSERT INTO TABLE table_A PARTITION (FILE_DATE) SELECT id, eventtime ,CONCAT_WS( '-' ,substr ( eventti
0 2023-05-24
编程技术问答社区
自定义映射器和还原器vs HiveQL
问题语句: - 我需要比较两个表Table1和Table2,它们都存储了同样的东西.因此,我需要将Table2与Table1进行比较,为Table1是需要进行比较的主表.因此,在比较之后,我需要提出一份报告,即Table2有某种差异.这两个表具有大量数据,围绕TB数据.因此,目前,我已经写了HiveQL进行比较并将数据归还. 所以我的问题是,在PERFORMANCE方面,哪个更好,写CUSTOM MAPPER and REDUCER来完成这种工作或我写的HiveQL,因为我将在数百万桌上加入这两个表格记录.据我所知,内部(幕后)生成了优化的自定义地图降低器并提交执行并恢复结果. 解决方案 您的问题的答案是两倍. 首先,如果您可以在Hive QL语法中表达某些处理,我认为Hive的性能与编写自定义地图 - 还原的性能相当.唯一的收获是,当您有一些有关数据中使用的额外信息,而不是通过Hive使用.例如,如果您的数据进行排序,则可以在映射器中处理文件分布时使用此信息,
2 2023-05-23
编程技术问答社区
以并行方式执行带有IN子句参数的Hive查询
我有一个像下面的蜂巢查询: select a.x as column from table1 a where a.y in () union all select b.x as column from table2 b where b.y in () 我已经设置了hive.exec.parallel为true,这有助于我在联合全部之间的两个查询之间实现并行性. 但是,我的IN子句具有许多逗号分离的值,每个值将在1个作业中进行一次,然后是下一个值.这实际上是在顺序执行的. 是否有任何Hive参数,如果启用可以帮助我获取IN子句中参数的数据? 当前,我所拥有的解决方案是用=多次而不是一个IN子句. 解决方案 无需在单独的查询中多次读取相同的数据即可获得更好的并行性.调整适当的映射器和还原的并行性
2 2023-05-23
编程技术问答社区
在Hive中为年、月、日创建表分区
我在以下结构中有2年的数据(2015-2017). appdata/contryname/year/nover/day/app1.json 例如: appdata/india/2016/07/01/geek.json appdata/印度/2016/07/02/geek.json appdata/us/2016/07/01/geek.json 现在我创建了一个带有分区的外部表. PARTITIONED BY (Country String, Year String, Month String, day String) 之后,我需要在Alter表语句中添加分区. ALTER TABLE mytable ADD PARTITION (country='India', year='2016',month='01', day='01') location 'AppData/India/2016/07/01/' 无法每天为每天添加分区脚本
0 2023-05-20
编程技术问答社区
将普通列转换为蜂巢中的分区列
我有一个带有3列的表.现在,我需要将列之一修改为分区列. 有可能吗?如果没有,我们如何将分区添加到现有表中.我使用了以下语法: 创建表T1(Eno int,ename string)行格式的划界字段终止于" \ t"; 将数据局部"/..Path/"加载到表T1中; Alter表T1添加分区(p1 ='印度'); 我正在遇到错误......... 有人知道如何将分区添加到现有表 ......? 预先感谢. 解决方案 我认为这是直接的. Hive将不得不完全重新排列并在HDF中拆分文件,因为添加分区将施加新的目录结构. 我建议您做的就是简单地创建一个带有所需模式和分区的新表格,然后将所有内容从第一个插入第二个. 其他解决方案 您无法将分区添加到创建的表中. 但是您可以做类似这些步骤的事情. 创建一个新表格并将数据从旧表到新表插入. /*Original table structure*/ CREATE TABLE original_table
2 2023-05-20
编程技术问答社区
为什么我在向分区表写入时得到 "文件只能被复制到0个节点"?
我在带有分区的Hive中创建一个外部表,然后尝试从现有表中填充它,但是,我得到以下例外: Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /apps/hive/warehouse/pavel.db/browserdatapart/.hive-staging_hive_2018-12-28_13-22-45_751_6056004898772238481-1/_task_tmp.-ext-10000/cityid=1/_tmp.000001_3 could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and no node(s) are e
6 2023-05-20
编程技术问答社区
从一个表复制数据到另一个分区表
%hive INSERT INTO NEWPARTITIONING partition(year(L_SHIPDATE)) select * from LINEITEM; 我想将数据从行项目复制到分区表NEWPARTITIONING,但是我有以下错误: 第1:54无法识别近附近的输入')'''*'*'在语句中. 不明白为什么会发生此错误.谁能给我一些想法 解决方案 Hive支持动态或静态分区加载. 分区规范仅允许列名称或列列表(对于 动态分区负载),如果您需要函数,请在选择中对其进行计算,请参见下面的示例: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; insert into table NEWPARTITIONING partition (partition_column) select i.col1, ...
2 2023-05-20
编程技术问答社区
为什么在这个查询中没有消除分区?
我有一张蜂巢桌,按年,月,每日和小时划分.我需要对其进行查询以获取最近7天的数据.这在Hive 0.14.0.2.2.4.2-2中.我的查询目前看起来像这样: SELECT COUNT(column_name) from table_name where year >= year(date_sub(from_unixtime(unix_timestamp()), 7)) AND month >= month(date_sub(from_unixtime(unix_timestamp()), 7)) AND day >= day(date_sub(from_unixtime(unix_timestamp()), 7)); 这需要很长时间.当我替换上述实际数字时,例如: SELECT COUNT(column_name) from table_name where year >= 2017 AND month >= 2 AND day >= 13 它在几分钟内完成
4 2023-05-20
编程技术问答社区
在Hive查询中由于内存而产生的问题
我们有插入查询,其中我们试图通过从非分区表中读取数据将数据插入到分区表中. 查询 - insert into db1.fact_table PARTITION(part_col1, part_col2) ( col1, col2, col3, col4, col5, col6, . . . . . . . col32 LOAD_DT, part_col1, Part_col2 ) select col1, col2, col3, col4, col5, col6, . . . . . . . col32, part_col1, Part_col2 from db1.main_table WHERE col1=0; 表有34列,主表中的记录数取决于我们每天收到的输入文件的大小. 我们在每次运行中插入的分区数(PART_COL1,PART_COL2)可能从4000到5000 有时此查询失败了以
2 2023-05-20
编程技术问答社区
如何浏览蜂巢中的所有分区?
我想在所有分区中更新列的值.在我发现insert overwrite之前,可以用于更新数据.我目前的说法是 insert OVERWRITE table s_job PARTITION(pt = '20190101') select case job_name when 'Job' then 'system' end from s_job; 但是,它必须指定某些分区.我想要的是更新所有分区中的值,我不知道该怎么做.有没有办法使用Hive SQL通过Hive中的所有分区?非常感谢. 解决方案 使用动态分区: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; insert OVERWRITE table s_job PARTITION(pt) select --Add all columns in their original order
4 2023-05-20
编程技术问答社区
动态分区不能成为静态分区的父分区 '3'。
在将数据插入表中时,使用以下查询 插入误差"动态分区不能是静态分区'3'的父 插入表格student_partition分区(课程,年= 3) 选择名称,ID,Student1的课程,其中= 3; 请解释原因.. 解决方案 此例外的原因是因为分区是层次结构文件夹. course文件夹是上层,year是每年的嵌套文件夹. 动态创建分区时,应首先创建上部文件夹(课程),然后嵌套year=3文件夹. 您是在已知course之前(静态上)提供year=3分区. 可能是vice-vice-a:静态父母分区和动态子分区: INSERT INTO TABLE student_partition PARTITION(course='chemistry' , year) --static course partition SELECT name, id, 3 as year --or just simply year FROM student1 WHE
4 2023-05-20
编程技术问答社区
从另一个表创建临时表,包括hive中的分区列
我正在使用AS子句从另一个表中创建一个临时表,其中我包括另一个表的分区列也是临时表的一部分,然后我遇到以下错误.下面是表创建语句,其中col4是表xyz的分区列. 并且在运行创建语句时,我会遇到以下错误.当我从创建语句中删除col4时,其运行正常. 错误: 编译语句时错误:失败:numberFormateXception for 输入字符串:" hive_default_partition"(状态= 42000,代码= 40000) 请帮助. 示例: CREATE TEMPORARY TABLE abc STORED AS PARQUET AS SELECT col1 AS col1, col2 AS col2, col3 AS col3, col4 AS col4 FROM xyz; 解决方案 这是源表xyz的问题,因为它包含分区__HIVE_DEFAULT_PARTITION__ hive在动态分区模式中插入分区值为null. 分区_
0 2023-05-20
编程技术问答社区
Hive parquet snappy压缩不工作
我正在使用表属性创建一个表骨架 TBLPROPERTIES('PARQUET.COMPRESSION'='SNAPPY') (由于文件为镶木格式)并在创建表格之前设置很少的参数为: set hive.exec.dynamic.partition.mode=nonstrict; set parquet.enable.dictionary=false; set hive.plan.serialization.format=javaXML; SET hive.exec.compress.output=true; SET mapred.output.compression.type=BLOCK; set avro.output.codec=snappy; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; add jar /opt/cloudera/parcels/CDH-5.5.1
2 2023-05-20
编程技术问答社区
Hive alter table change column name gives 'NULL' to the renamed column.
我试图将表中的现有列重命名为新的列.但是在名称更改之后,新列仅给我" null"值. 木板中表的存储格式. 例如, '用户'是字符串数据类型的"测试"表中的列.插入具有" John"的示例记录. Select user from Test; 结果:约翰 我在没有更改任何数据类型的情况下将"用户"重命名为" user_name". ALTER TABLE Test CHANGE user user_name String; Select user_name from Test; 结果:null 请让我知道如何解决此问题? 在这种情况下,MSCK维修表是否有任何用途? 我需要再次重新加载此表以解决此问题吗? 问候, Adarsh K S 解决方案 您可以做的是添加新字段,执行一个插入覆盖物,然后删除旧字段. 这样的东西: ALTER TABLE temp.Test ADD COLUMNS (user_new
0 2023-05-20
编程技术问答社区
在Parquet记录中查询一个嵌套数组
我正在尝试在记录数组中查询记录的不同方法,并将完整的行显示为输出. 我不知道哪个嵌套对象具有" PG"字符串.但是我想查询特定对象.该对象是否具有" PG".如果存在" PG",那么我想显示完整的行.如何在嵌套对象上写" Spark SQL查询"而不指定对象索引.因此,我不想使用儿童索引.名称 我的avro记录: { "name": "Parent", "type":"record", "fields":[ {"name": "firstname", "type": "string"}, { "name":"children", "type":{ "type": "array", "items":{ "name":"child", "type":"record",
0 2023-05-19
编程技术问答社区
插入覆写目录的Hive案例声明
尝试使用以下逻辑运行HQL脚本时,我会收到错误: ParseException line 4:0 cannot recognize input near 'CASE' 'WHEN' 'mytable' in serde properties specification 脚本逻辑 INSERT OVERWRITE DIRECTORY '/example/path' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' CASE WHEN ${hiveconf:tbl_name}='mytable' THEN SELECT * FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...; WHEN ${hiveconf:tbl_name}='mytable2' THEN SELECT * FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...; ELSE THEN EN
2 2023-05-19
编程技术问答社区
将多个日期作为参数传递给Hive查询
我试图将日期列表作为参数列表到我的Hive查询. #!/bin/bash echo "Executing the hive query - Get distinct dates" var=`hive -S -e "select distinct substr(Transaction_date,0,10) from test_dev_db.TransactionUpdateTable;"` echo $var echo "Executing the hive query - Get the parition data" hive -hiveconf paritionvalue=$var -e 'SELECT Product FROM test_dev_db.TransactionMainHistoryTable where tran_date in("${hiveconf:paritionvalue}");' echo "Hive query - ends" 输出为: E
4 2023-05-19
编程技术问答社区
带有Group By条款的条件聚合
我正在尝试使用HiveQL来做到这一点,但我不知道如何在SQL中做到这一点.表结构如下: id1 id2 category 123 abc 1 123 def 1 123 def 2 456 abc 1 123 abc 1 123 abc 2 ... 我想编写一个输出的查询: key count category1count category2count 123-abc 3 2 1 123-def 2 1 1 456-abc 1 1 0 到目前为止,我已经得到了: SELECT concat( concat(id1,'-
0 2023-05-19
编程技术问答社区
在分层组上的Hive-multiple(平均)计数区别
给出以下源数据(例如表名为user_activity): +---------+-----------+------------+ | user_id | user_type | some_date | +---------+-----------+------------+ | 1 | a | 2018-01-01 | | 1 | a | 2018-01-02 | | 2 | a | 2018-01-01 | | 3 | a | 2018-01-01 | | 4 | b | 2018-01-01 | | 4 | b | 2018-01-02 | | 5 | b | 2018-01-02 | +---------+-----------+------------+ 我想获得以下结果:
0 2023-05-19
编程技术问答社区