我需要从配置单元中的字符串列中提取日期和小时。
select TO_DATE(from_unixtime(UNIX_TIMESTAMP(dates,'dd/MM/yyyy'))) from dates;
output:
0016-01-01
0016-01-01
select TO_DATE(from_unixtime(UNIX_TIMESTAMP(dates,'hh'))) from dates;
output:
1970-01-01
1970-01-01
Run Code Online (Sandbox Code Playgroud)
请告知如何从表列中单独获取日期和时间。
我有一个表(data_table),其中包含多个分区列年/月/月键。
目录看起来像year=2017/month=08/monthkey=2017-08/files.parquet
下面哪个查询会更快?
select count(*) from data_table where monthkey='2017-08' 
或者
select count(*) from data_table where monthkey='2017-08' and year = '2017' and month = '08'
我认为在第一种情况下 hadoop take 查找所需目录所需的初始时间会更多。但想确认一下
hive我有一张如下所示的表格。我想从这个表中insertdate选择在哪里。customer_idinsertdatecurrent_date - 7 days
original table
+------------------------+--------------+
|       insertdate       | customer_id  |
+------------------------+--------------+
| 2018-04-21 04:00:00.0  | 39550695     |
| 2018-04-22 04:00:00.0  | 38841612     |
| 2018-04-23 03:59:00.0  | 23100419     |
| 2018-04-24 03:58:00.0  | 39550688     |
| 2018-04-25 03:58:00.0  | 39550691     |
| 2018-05-12 03:57:00.0  | 39550685     |
| 2018-05-13 03:57:00.0  | 39550687     |
| 2018-05-14 03:57:00.0  | 39550677     |
| 2018-05-14 03:56:00.0  | 30254216     |
| 2018-05-14 03:56:00.0  | 39550668     |
+------------------------+--------------+ …Run Code Online (Sandbox Code Playgroud) 我需要从表中连接 3 列,例如 a、b、c。如果列的长度大于 0,那么我必须连接所有 3 列并将其存储为以下格式的另一列 d。
1:a2:b3:c
Run Code Online (Sandbox Code Playgroud)
我已尝试以下查询,但我不确定如何继续,因为结果为 null。
select a,b,c,
case when length(a) >0 then '1:'+a else '' end + case when length(b) > 0 then '2:'+b else '' end + case when length(c) > 0 then '3:'+c else '' end AS d
from xyz;
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助:)
数据集如下所示:
| ID | 结果 | 秩 | 
|---|---|---|
| 001 | 经过 | 2 | 
| 002 | 失败 | 3 | 
| 001 | 失败 | 1 | 
| 002 | 经过 | 1 | 
我想要做的:按 id 对数据集进行分组,并按排名列的升序连接结果。
| ID | 结果 | 
|---|---|
| 001 | 失败通过 | 
| 002 | 过关失败 | 
由于涉及到其他栏目的顺序,该concat_ws('-',collect_set(result))功能无法实现我的想法。
是否有任何内置函数可以帮助我实现此目的,或者编写 UDF 似乎是唯一的解决方案?
我有以下 SQL 查询:
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id  = y.member_id)
WHEN MATCHED THEN
    UPDATE SET x.first_name = y.first_name, 
                        x.last_name = y.last_name, 
                        x.rank = y.rank
    WHERE x.first_name <> y.first_name OR 
           x.last_name <> y.last_name OR 
           x.rank <> y.rank 
WHEN NOT MATCHED THEN
    INSERT(x.member_id, x.first_name, x.last_name, x.rank)  
    VALUES(y.member_id, y.first_name, y.last_name, y.rank);
Run Code Online (Sandbox Code Playgroud)
我想在 Hive 查询中实现它,HIVE 中是否有 MERGE JOIN 的等效项?
我有四列
date   number   Estimate   Client    
----   ------
1      3          10        A 
2      NULL       10        Null
3      5          10        A      
4      NULL       10        Null 
5      NULL       10        Null
6      2          10        A   
.......
Run Code Online (Sandbox Code Playgroud)
我需要用新值替换NULL值,并采用日期列中前一个日期中最后一个已知值的值,例如:date = 2 number = 3,date 4和5 number = 5和5。出现NULL值随机地。
这需要在Hive中完成。
我从主管那里得到了一个项目任务,他声称可以在HDInsight(用于Windows)中使用Hive,以便查询两种不同的文件类型,然后从它们中提取数据。这些文件之一是.xls文件,另一个是.csv文件。
我已经设法通过VS将这两个文件上传到Hadoop集群,然后尝试从.xls文件创建Hive表(在使用.csv文件与Hive配合良好的前提下,我曾使用过教程),但使用.xls文件,尝试时不断收到“失败”错误。
我尝试了以下示例代码来创建表,定界,字段终止(其中我尝试了几次但没有成功),文件类型(不确定在此还要使用什么)和目标位置。
DROP TABLE IF EXISTS table1;
CREATE EXTERNAL TABLE IF NOT EXISTS table1(id int, postcde int, city string) 
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ' ' 
    STORED AS TEXTFILE LOCATION 'wasb://container@resourcegroup.blob.core.windows.net/folder1/data.xls/'
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可能实现,因为这里似乎对类似的问题存在矛盾的回答,但是据我的主管说,应该使用Hive做到这一点- 无需将文件类型转换为相同格式,然后再上传到Hadoop!
我有一个像下面这样的表,它有开始范围和结束范围列。
+------+----------+--------+--+
|  f1  | start_r  | end_r  |
+------+----------+--------+--+
| ABC  | 31       | 29     |
+------+----------+--------+--+
Run Code Online (Sandbox Code Playgroud)
我需要使用start_r和end_r中的值并产生如下所示的输出(生成起始和终止范围之间的序列号减1)
 f1   seq_no
 ABC   31
 ABC   30
 ABC   29
Run Code Online (Sandbox Code Playgroud)
我只需要一种方法来生成值..为此,蜂巢中是否有任何buitin函数?
假设我查询:
select explode(map_column_name) as exploded from table_name 
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
AS子句中的别名数与UDTF输出的列数不匹配,预计有2个别名,但得到1
我用google搜索错误,并且知道要给多个别名,我们使用堆栈函数.如何使用堆栈函数以及爆炸函数,以便最终爆炸map数据类型,同时也提供2个别名?
请耐心等待我,因为我是初学者并且正在学习Hive.