gpt4 book ai didi

MySQL加载数据InFile;如果跳过行

转载 作者:行者123 更新时间:2023-11-30 22:13:10 32 4
gpt4 key购买 nike

我已经花了相当多的时间在谷歌上搜索这个,但我似乎无法将自己指向我正在寻找的正确方向。我的 .csv 文件的问题是,虽然行终止符是 ',,,,',但有些行不包含此内容,因此当我导入文件时,它很好,直到它到达其中一个,但随后它会处理它作为一条记录,它的长度大约是标准记录应具有的列数的两倍,然后从那时起就被抛弃了。我需要做的是跳过超过正确列数 (15) 的记录(',,,,' 终止符之间的数据)。我意识到每次发生这种情况时,这基本上都会跳过 2 条记录,但这对于我处理相当大的数据集的目的来说很好。

我遇到过 IGNORE 关键字,但它似乎并不适用。我正在寻找的是这样的:对于导入期间的每条记录,如果 record.columns.count > 15,则跳过记录。这是我的导入语句,感谢您提供的任何帮助。

LOAD DATA LOCAL INFILE "/Users/foo/Desktop/csvData.csv"
INTO TABLE csvData
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY ',,,,';

最佳答案

如果你只想跳过格式错误的记录,一个简单的 awk 命令只过滤好的记录是:

awk -F, '{ if (NF == 15) print; }' csvData.csv > csvData_fixed.csv

然后从固定文件LOAD DATA

如果你想更有趣,你可以使用 awk(或 Python 或任何你喜欢的)编写脚本,以正确的格式重写格式错误的记录。


关于您的评论:awk 命令读取您的原​​始文件并仅输出恰好有 15 个字段的每一行,其中字段以逗号分隔。

显然您的输入数据没有恰好有 15 个字段的行,即使您是这样描述的。


另一个想法:在您原来的 LOAD DATA 命令中使用行终止符 ',,,,' 有点奇怪。通常行终止符是'\n',这是一个换行符。因此,当您将行终止符重新定义为 ',,,,' 时,这意味着 MySQL 将继续读取文本,直到它找到 ',,,,',即使最终会在多行文本中读取数十个字段。也许您可以将行终止符设置为 ',,,,\n'。

关于MySQL加载数据InFile;如果跳过行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359663/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com