【问题标题】:How to find current executing line from a hql file如何从 hql 文件中查找当前执行行
【发布时间】:2021-12-10 11:46:36
【问题描述】:

我有一个 sample.hql 文件,其中包含以下几行。

desc db.table1;
desc db.table2;
desc db.table3;

我正在尝试从 shell 命令运行它 我想知道表中是否存在特定列 例如,如果 col_1 存在于 table1 中,则输出应显示 col1_1 is found in db.table1

我不知道如何找到它。 我正在执行下面的命令

hive -f sample.hql | grep -q "<column_name>"

但我不确定如何从每个执行行获取数据库和表名。

【问题讨论】:

  • @Ben 这太耗时了,因为每次调用我都必须访问 hive shell
  • Hive 的新(er)版本定义了符合 ANSI 的 information_schema 数据库,可以直接(从直线)查询,而不是运行多个 describe tableissues.apache.org/jira/browse/HIVE-1010。所以如果你一直勤奋并跟上升级...... :)

标签: shell hadoop hive script hive-query


【解决方案1】:

你可以让 grep 在-B 之前和-A 之后显示你。下面的命令会显示你之前的 10 行。这可能会快速而肮脏地完成工作。

 hive -f sample.hql | grep -B 10 -q "<column_name>"

如果您想更加小心一点,您可以尝试使用 for 循环,而不是一次将行输入到 hive 中。如果它找到该列,它将回显它在其中找到该列的表。('&&' 仅在上一个命令成功的情况下执行代码)

#!/bin/bash

for i in $(cat sample.hql); do
    
    hive -e "$i" | grep -q "<column_name>" && echo $i; 
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2010-10-14
    • 2013-01-12
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多