【问题标题】:Hive - Concat String with row dataHive - 带有行数据的 Concat 字符串
【发布时间】:2016-04-09 17:41:04
【问题描述】:

我正在尝试使用 Hive 将字符串与表中的数据行连接起来。

在 SQL 中看起来像这样

 SELECT 'Select * from ' + [Column] + '; '
                 FROM table_name
                 ORDER BY [table_name]

结果应该是 - SELECT * FROM abc;选择 * 从 asd;从 xyz 中选择 * ..

无法在 Hive 命令中编写或找到与此相关的内容。

【问题讨论】:

  • SELECT '选择 * from ' + [Column] + '; ' FROM table_name ORDER BY [Column]
  • 您是否尝试过在 Hive 中执行它?如果是,您会收到错误吗?
  • 使用concat()函数。
  • @vkp 无法识别“+”
  • 您是否尝试在 SQL 查询中动态创建 SQL 查询?

标签: sql hadoop hive concatenation hiveql


【解决方案1】:

使用 concat() 函数:

'SELECT concat('Select * from ', [table_name],  '; ') 
                 FROM your_table
                 ORDER BY [table_name]'

如果 [table_name] 是包含 table_name 的列

【讨论】:

  • 此格式无效。这里的问题是 "" Select * from "" 是硬编码的,而 [Column] 是动态的。必须动态连接列中的硬编码字符串和数据。
【解决方案2】:

您可以使用 concat 来完成您的任务。但是如果你直接把“;”在 concat 函数内部,它可能会显示“无法识别输入错误”以避免这种使用 \ before ;

下面是相同的测试和工作示例

select concat("select * from ", col , " \;") from table

输出:

从 A 中选择 * ;

【讨论】:

    【解决方案3】:

    连接行中的字符串数据。 说 x,y 作为列名。

    insert into orders(1,"a");
    insert into orders(2,"b");
    

    这里假设我们想将 "a","b" 连接为一个实体。 所以我们按照以下方式进行

    select concat_ws(',',collect_list(a,b)) from orders;
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2019-04-16
      • 2019-03-25
      • 2018-12-14
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多