Hadoop 气流失败:ParseException行2:0无法识别附近的输入

Hadoop 气流失败:ParseException行2:0无法识别附近的输入,hadoop,hive,airflow,Hadoop,Hive,Airflow,我正在尝试在Airflow上运行测试任务,但不断出现以下错误: 失败:ParseException 2:0无法识别“创建\u导入\u表\u fct\u最新\u值”附近的输入。“hql” 这是我的气流Dag文件: 导入气流 从datetime导入datetime,timedelta 从airflow.operators.hive_操作符导入HiveOperator 从airflow.models导入DAG args={ “所有者”:“劳尔”, “开始日期”:日期时间(2018年11月12日), “

我正在尝试在Airflow上运行测试任务,但不断出现以下错误:

失败:ParseException 2:0无法识别“创建\u导入\u表\u fct\u最新\u值”附近的输入。“hql”

这是我的气流Dag文件:

导入气流
从datetime导入datetime,timedelta
从airflow.operators.hive_操作符导入HiveOperator
从airflow.models导入DAG
args={
“所有者”:“劳尔”,
“开始日期”:日期时间(2018年11月12日),
“提供上下文”:True,
“依赖于过去”:False,
“重试”:2次,
“重试延迟”:时间增量(分钟=5),
“电子邮件”:劳尔。gregglino@leroymerlin.ru'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:False
}
dag=dag(‘opus_数据’,
默认值_args=args,
最大有效运行次数=6次,
计划时间间隔=“每日”
)
导入\u lv\u数据=HiveOperator(
任务\u id='fct\u最新\u值',
配置单元\u cli\u conn\u id='metastore\u default',
hql='create_import_table_fct_latest_values.hql',
hiveconf_jinja_translate=True,
dag=dag
)
deps={}
#明确定义DAG中的依赖项
对于deps.iteritems()中的下游、上游_列表:
对于上游_列表中的上游:
dag.set_相关性(上游、下游)
以下是我的HQL文件的内容,以防这可能是问题所在,我无法确定:

*I'm testing the connection to understand if the table is created or not, then I'll try to LOAD DATA, hence the LOAD DATA is commented out.
CREATE TABLE IF NOT EXISTS opus_data.fct_latest_values_new_data (
    id_product          STRING,
    id_model            STRING,
    id_attribute        STRING,
    attribute_value     STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED ',';

#LOAD DATA LOCAL INPATH
#'/media/windows_share/schemas/opus/fct_latest_values_20181106.csv'
#OVERWRITE INTO TABLE opus_data.fct_latest_values_new_data;

在HQL文件中,它应该是以“,”结尾的
字段。

CREATE TABLE IF NOT EXISTS opus_data.fct_latest_values_new_data (
    id_product          STRING,
    id_model            STRING,
    id_attribute        STRING,
    attribute_value     STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
注释应该以HQL文件中的
--
开头,而不是
#

此外,这似乎不正确,并导致异常
hql='create\u import\u table\u fct\u latest\u values.hql'

看看这个例子:

 #Create full path for the file
    hql_file_path = os.path.join(os.path.dirname(__file__), source['hql'])
    print hql_file_path
    run_hive_query = HiveOperator(
        task_id='run_hive_query',
        dag = dag,
        hql = """
        {{ local_hive_settings }}
        """ + "\n " + open(hql_file_path, 'r').read()
)
有关更多详细信息,请参阅

或将所有HQL放入HQL参数:

hql='CREATE TABLE IF NOT EXISTS opus_data.fct_latest_values_new_data ...'

我设法找到了我的问题的答案

它与HiveOperator调用文件的路径有关。由于没有定义变量来告诉气流在哪里寻找,所以我得到了我在帖子中提到的错误

一旦我使用webserver接口定义了dag(见图),我的dag就开始正常工作。

我仅就组织的文件位置更改了DAG代码,这就是我的HiveOperator现在的样子:

import_lv_data = HiveOperator(
    task_id='fct_latest_values',
    hive_cli_conn_id='metastore_default',
    hql='hql/create_import_table_fct_latest_values2.hql',
    hiveconf_jinja_translate=True,
    dag=dag
    )

多亏()亲自帮助我确定了我的问题。

1,你的昵称让我发笑。不错。第二。感谢您在hive中更新评论,有一段时间我没有使用。三,。我试图找出的错误正是造成错误的原因,即使是你给我的例子,我也无法解释和应用。