|
|
# 将数据保存到文件中
|
|
|
|
|
|
**class**参数配置为```file.FileWriter```
|
|
|
|
|
|
## init 参数
|
|
|
|
|
|
|配置参数|默认值|说明|
|
|
|
|----|----|----|
|
|
|
|path| |输出文件的目录路径|
|
|
|
|overwrite|False| 是否覆盖写|
|
|
|
|max_size|125| 限制单个文件的大小|
|
|
|
|scale|m| max_size的单位,支持['b', 'k', 'm', 'g', 't']|
|
|
|
|prefix|split|文件前缀|
|
|
|
|prefix_add_pid|False|开关,True时文件名中加入进程号可以防止多进程时写文件冲突|
|
|
|
|output_form|bson|文件格式,支持bson, json, csv|
|
|
|
|csv_sep| | output_form为csv时的字段分隔符|
|
|
|
|csv_cols|None| output_form 为csv时, 指定需要写的字段,并按指定的字段顺序写文件, 默认将json中的所有value写入|
|
|
|
|csv_dialect|customize| csv格式,支持 'mysql','excel', 'customize', 默认为自定义格式。
|
|
|
|enclosed_sep| | output_form 为csv时, 是否将字段内容用指定的符号包起来,可设为双引号‘"’
|
|
|
|escaped_sep| | output_form 为csv时, 将字段内容中的分隔符替换为指定的字符,如csv_sep='\t',escaped_sep='\\t'时,将字段内容中的'\t' 替换为'\\t'
|
|
|
|is_none|None| output_form 为csv时,如果is_none is True, 会将None写为\N, 否则将None写为''
|
|
|
|compress|不压缩| 是否压缩文件,,如果需要压缩,可设为'gz','tar'
|
|
|
|data_split| False |是否根据data中的某一列值为文件夹名来存储数据,如果需要,设为True
|
|
|
|data_key| None | 按照此列值为文件夹名来存储数据,与data_split参数一起使用,与data_split=True时,这是必填参数
|
|
|
|date_split| False |是否根据日期来存储数据,如果需要,设为True(当data_split,date_split同时启用时,切分效果同时生效,但是data_split优先切分,即先按字段切分再按日期切分)
|
|
|
|data_key| None | 按照此数据中列值为日期单位存储数据,不填写的话,按照系统的时间来存储数据。可参考filter中的实现
|
|
|
|match_key | None | 匹配match_key定义的数据键值,其他的舍弃,优先级高于match_key。可参考filter中的实现
|
|
|
|match_expr | None | Python正则语法过滤数据,匹配的才会写到文件,优先级低于match_key,有match_key时不生效
|
|
|
|custom_time_pattern | None | 按照给的正则表达式提供的格式确定数据最小时间切分单位,比如按照小时存存储,custom_time_pattern='%Y%m%d/%H'
|
|
|
|close_file_interval|None | 默认值为None,有些文件长时间不关闭; 设置数字时为子线程定时关闭文件的时间间隔秒数。比如300,就是5分钟关闭一次文件|
|
|
|
|
|
|
### 设置保存文件的目录
|
|
|
* path
|
|
|
|
|
|
### 控制单个文件的大小
|
|
|
|
|
|
* max_size
|
|
|
* scale
|
|
|
|
|
|
### 保存为CSV格式
|
|
|
|
|
|
与csv相关的参数
|
|
|
|
|
|
* output_form
|
|
|
* csv_dialect
|
|
|
* csv_sep
|
|
|
* csv_cols
|
|
|
* enclosed_sep
|
|
|
* escaped_sep
|
|
|
* is_none
|
|
|
|
|
|
>当csv_dialect设为excel或mysql时,csv_sep、enclosed_sep、escaped_sep、is_none参数设置将被忽略
|
|
|
|
|
|
#### 为mysqlimport准备数据
|
|
|
|
|
|
将csv_dialect设为 mysql 生成的CSV文件可以使用mysqlimport导入到mysql中。
|
|
|
```
|
|
|
mysqlimport --verbose
|
|
|
--fields-terminated-by='\t' \
|
|
|
--lines-terminated-by='\n' \
|
|
|
--fields-enclosed-by='' \
|
|
|
-h {host} -P {port} -u{user} -p{password} \
|
|
|
--force \
|
|
|
--columns="{fields}" \
|
|
|
--local {database} {table}.csv
|
|
|
```
|
|
|
|
|
|
#### 为excel准备数据
|
|
|
csv_dialect 设为excel生成的CSV文件,可以直接使用excel打开。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 配置样例:
|
|
|
```yaml
|
|
|
stock_ic_clear:
|
|
|
class: file.FileWriter
|
|
|
init:
|
|
|
path: "/data/disk3/data_lake/ic/clear"
|
|
|
output_form: csv
|
|
|
csv_sep: "\t"
|
|
|
csv_cols: "company_id,clear_director,clear_members,create_time,update_time"
|
|
|
is_none: True
|
|
|
escaped_sep: "\\t"
|
|
|
```
|
|
|
|
|
|
|
|
|
output_form为csv时,插件内部已经将特殊字符、分割符等做了转义处理,所以不用担心错行、导入mysql中字段错乱问题。
|
|
|
自定义csv格式时,分隔符建议设为常用分隔符。字段分隔符推荐使用‘\t’,',',换行符推荐使用‘\n’,字段封闭符推荐使用‘"’,若不是为了将csv文件导入mysql表中,建议is_none使用默认值
|
|
|
|