MySQL LOAD DATA LOCAL INFILE - 当分隔符不匹配时会失败

问题描述

我试图在气流中使用 MysqL 的 LOAD DATA LOCAL INFILE 函数来从临时文件填充表。我遇到的问题是,当分隔符与预期不匹配时,我只会收到警告消息,并且无论如何加载都会继续。如果分隔符不匹配,是否可以使用 LOCAL 加载并使 sql 完全失败?当我希望它失败时,这会导致错误的数据加载到表中。

我尝试了非本地版本的 LOAD DATA INFILE 但我得到了权限错误,因为我的临时文件MysqL 服务器在不同的主机上,所以我想我坚持使用 LOCAL 选项。

    temp_to_table = MysqLOperator(
      task_id='temp_to_table',conn_id=MysqL_conn_id,sql="""
      LOAD DATA LOCAL INFILE '{{ ti.xcom_pull(key='file_path') }}' 
       INTO TABLE airflow.users_test 
       FIELDS TERMINATED BY '\x01'
       LInes TERMINATED BY '\x02';
      """,autocommit=True
      )

以下是我收到的一些警告消息,但数据继续加载到表中:

[2021-03-02 16:03:03,742] {logging_mixin.py:112} WARNING - /opt/airflow/plugins/MysqL_plugins.py:89: Warning: (1265,"Data truncated for column 'id' at row 1")
  cur.execute(self.sql)
[2021-03-02 16:03:03,742] {logging_mixin.py:112} WARNING - /opt/airflow/plugins/MysqL_plugins.py:89: Warning: (1261,"Row 1 doesn't contain data for all columns")

  cur.execute(self.sql)
[2021-03-02 16:03:03,743] {logging_mixin.py:112} WARNING - /opt/airflow/plugins/MysqL_plugins.py:89: Warning: (1265,"Data truncated for column 'superuser' at row 2")

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)