问题描述
我试图在气流中使用 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 (将#修改为@)