Hive文档再次缺乏:
我想将查询结果写入本地文件以及列的名称.
Hive支持这个吗?
Insert overwrite local directory 'tmp/blah.blah' select * from table_name;
Run Code Online (Sandbox Code Playgroud)
另外,另外一个问题:StackOverflow是获得Hive帮助的最佳位置吗?@Nija,非常乐于助人,但我不打扰他们......
我刚开始探索Hive.它具有类似于表,连接,分区等RDBMS的所有结构.我所理解的是Hive仍然使用HDFS进行存储,它是HDFS的SQL抽象.由此我不确定天气Hive本身是一个像HBase,Cassnadra这样的数据库解决方案..或者只是它是HDFS之上的查询系统.我认为它不仅仅是一种查询语言,因为它具有表,连接和分区.
我有一个蜂巢桌,
name    age     sal
A       45      1222
B       50      4555
c       44      8888
D       78      1222
E       12      7888
F       23      4555
Run Code Online (Sandbox Code Playgroud)
我想计算年龄栏的中位数.
以下是我的方法
select min(age) as HMIN,max(age) as HMAX,count(age) as HCount,
IF(count(age)%2=0,'even','Odd') as PCOUNT 
from v_act_subjects_bh;
Run Code Online (Sandbox Code Playgroud)
感谢任何查询建议
我刚开始学习Hive.我在Hive书籍或Hive教程中经常看到三个术语.Hive Server,Hive Service和Thrift Server.这些是什么 ?他们是如何相关的?有什么不同 ?.什么时候使用这些?请解释
目前的架构是:
hive> describe tableA;
OK
id      int
ts      timestamp
Run Code Online (Sandbox Code Playgroud)
我想将ts列更改为BIGINT不丢弃表并再次重新创建.可能吗?
你好朋友,
我借助以下命令在hive中创建了表 -
CREATE TABLE db.test 
  ( 
     fname STRING, 
     lname STRING, 
     age   STRING, 
     mob   BIGINT 
  ) row format delimited fields terminated BY '\t' stored AS textfile; 
Run Code Online (Sandbox Code Playgroud)
现在从文件加载表中的数据,我使用以下命令 -
load data local inpath '/home/cluster/TestHive.csv' into table db.test;
Run Code Online (Sandbox Code Playgroud)
问题是,所有行都插入了,我不想要第一行,因为它只包含列名.
请建议我跳过第一行的方法.
提前致谢.
我在使用数据帧运行查询时看到了一些性能问题.我在研究中已经看到,长期运行最终任务可以表明数据没有被最佳干扰,但是没有找到解决此问题的详细过程.
我开始将两个表作为数据帧加载,然后我在一个字段上加入这些表.我试图通过(重新分区)添加分发,并按顺序排序,以提高性能,但我仍然看到这个单一的长期运行的最终任务.这是我的代码的简单版本,请注意查询一和二实际上并不简单,并使用UDF来计算某些值.
我尝试过几种不同的设置spark.sql.shuffle.我已经尝试了100,但它失败了(说实话我没有真正调试这个).我尝试了300,4000和8000.性能随着每次增加而下降.我选择一天的数据,每个文件是一小时.
val df1 = sqlContext.sql("Select * from Table1")
val df2 = sqlContext.sql("Select * from Table2")
val distributeDf1 = df1
    .repartition(df1("userId"))
    .sortWithinPartitions(df1("userId"))
val distributeDf2 = df2
    .repartition(df2("userId"))
    .sortWithinPartitions(df2("userId"))
distributeDf1.registerTempTable("df1")
distributeDf2.registerTempTable("df2")
val df3 = sqlContext
  .sql("""
    Select 
      df1.* 
    from 
      df1 
    left outer join df2 on 
      df1.userId = df2.userId""")
Run Code Online (Sandbox Code Playgroud)
由于看起来userId的分区并不理想,我可以通过时间戳进行分区.如果我这样做,我应该只做日期+小时吗?如果我有不到200个独特的组合,我会有空执行器吗?
由于Hive上没有IFNULL,ISNULL或者NVL支持函数,我将NULL转换为0.我试过COALESCE(*column name*, 0)但收到了以下错误消息:
参数类型不匹配0:COALESCE之后的表达式应该都具有相同的类型:"bigint"是预期的但是找到"int"
怎么解决这个?
我在HIVE中编写代码来创建一个包含1300行和6列的表:
create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;
Run Code Online (Sandbox Code Playgroud)
现在我想添加另一列,access_count1其中包含所有1300行的唯一值,值将是sum(max_count).max_count是我现有表中的一列.我怎么能这样做?我试图通过此代码更改表ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);