mysql - MySQL:使用 LOAD DATA 时压缩一列中的数据
问题描述
在 MySQL 数据库中,我使用BLOB
字段来存储来自可能很长的文本字符串的一些压缩数据,有时我希望向我的 Web 应用程序的用户显示这些数据,但这些数据永远不会被用于搜索或任何东西,基本的想法是保存在磁盘空间上。
我正在尝试使用LOAD DATA
tsv 文件填充我的表。问题是,我正在使用包含textBLOB
的表格文件,但是需要压缩其中一列(那一列)。
我尝试了以下方法,但没有成功。在此示例中,table_name.tsv
tsv 文件包含我要插入的数据table_name
,而我要压缩的文本在 columns 中col4
。
mysql -h <host> -u <user> -p <pwd> <db_name> --execute="LOAD DATA LOCAL INFILE 'table_name.tsv' INTO TABLE table_name(col1, col2, col3, @col4_comp_data) SET col4=COMPRESS(@col4_comp_data) FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' IGNORE 1 LINES; SHOW WARNINGS"
我得到的错误是:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 1 LINES' at line 1
知道是否可以在加载数据时压缩数据LOAD DATA
?
解决方案
您的语法顺序错误。
该LINES TERMINATED BY '\\n' IGNORE 1 LINES
部分需要在列设置部分之前。
正确的顺序是
BNF(巴科斯-瑙尔形式)代码
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var
[, col_name_or_user_var] ...)]
[SET col_name={expr | DEFAULT},
[, col_name={expr | DEFAULT}] ...]
推荐阅读
- python - Google drive API:获取上传视频的可共享公开链接
- apache-spark - 使用 Spark 计划 JSON 的 DynamoDB 数据格式
- python - 语音识别崩溃
- laravel - 在 laravel 中处理一个巨大的文本文件
- azure - 如何使用多个工件从多个分支自动触发 Azure Devops 中的发布
- c - CS50 拼写器内存泄漏
- google-cloud-platform - 谷歌云 SDK 外壳不显示正确的转录文本
- arangodb - Arangodb - 是否存在数据字典
- python - 通过python生成共享访问签名
- nginx - 无法访问 minikube 上 pod 上的应用程序