加载一个 TAR 文件并使用 bzcat 将其 *bz2 内容提取到 sdout
Loading a TAR file and extracting its *bz2 contents to sdout with bzcat
使用 bz2 压缩 json 文件后 this question, I'm attempting to load a 40 GB TAR file 以高效的方式导入 PostgreSQL。
根据上面提到的答案,我正在尝试分离流程并使用外部工具来创建以下流程。
- 使用 TAR 打开文件并将其提取到 SDOUT(在本例中为 bsdtar,因为 TAR 在其 Windows 构建中不包括提取),只有 *.bz2 文件。
- 调用 bzcat 提取 *BZ2 文件(导出到 sdout)
- 在我的 python 脚本 'file_handling' 中打开它,它将每个传入行映射到推文并将其作为 csv 输出到标准输出
- 将其通过管道传输到 PSQL 以将其加载到一个 COPY 命令中。
我目前在到达 bzcat 时遇到错误,这是我必须构建执行上述内容的行:
pipeline = [filename[1:3] + " && ", # Change drive to H so that TAR can find the file without a drive name (doesn't like absolute paths, apparently).
'"C:\Tools\GnuWin32\gnuwin32\bin\bsdtar" vxOf ' + filename_nodrive + ' "*.bz2"', # Call to tar, outputs to stdin
" | C:\Tools\GnuWin32\gnuwin32\bin\bzcat.exe"#, # Forward its output to bzcat
' | python "D:\Cloud\Dropbox\Coding\GitHub\pyTwitter\pyTwitter_filehandling.py"', # Extract Tweets
' | "C:\Program Files\PostgreSQL.4\bin\psql.exe" -1f copy.sql ' + secret_login_d
]
module_call = "".join(pipeline)
module_call = "H: && "C:\Tools\GnuWin32\gnuwin32\bin\bsdtar" vxOf "Twitter datastream/Sourcefiles/archiveteam-twitter-stream-2013-01.tar" "*.bz2" | C:\Tools\GnuWin32\gnuwin32\bin\bzcat.exe | python "D:\Cloud\Dropbox\Coding\GitHub\pyTwitter\pyTwitter_filehandling.py" | "C:\Program Files\PostgreSQL.4in\psql.exe" -1f copy.sql "user=xxx password=xxx host=localhost port=5432 dbname=xxxxxx""
执行TAR的代码时,CMD提示符输出TAR文件,提示我一切正常。但是,bzcat 行带来错误:
x 01/29/06/39.json.bz2
bzcat.exe: Data integrity error when decompressing.
Input file = (stdin), output file = (stdout)
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
运行 -tvv 给我:
huff+mtf data integrity (CRC) error in data
我尝试使用 7-zip (GUI) 提取相同的存档:这仍然有效。任何有关如何解决此问题的帮助将不胜感激。我是 运行 Windows 8.1 和 GNUWin32。
bsdtar.exe 是文件数据中的 translating newline 字节进入 DOS CRLF 序列导致损坏的 bzip2 输出流。
GNU tar 在使用相对路径时有效,但它不处理 Windows 中的绝对路径。
您最好的选择是改用 7-zip:
7z.exe x -so -ir!*.json.bz2 archive.tar | bzcat | ...
使用 bz2 压缩 json 文件后 this question, I'm attempting to load a 40 GB TAR file 以高效的方式导入 PostgreSQL。
根据上面提到的答案,我正在尝试分离流程并使用外部工具来创建以下流程。
- 使用 TAR 打开文件并将其提取到 SDOUT(在本例中为 bsdtar,因为 TAR 在其 Windows 构建中不包括提取),只有 *.bz2 文件。
- 调用 bzcat 提取 *BZ2 文件(导出到 sdout)
- 在我的 python 脚本 'file_handling' 中打开它,它将每个传入行映射到推文并将其作为 csv 输出到标准输出
- 将其通过管道传输到 PSQL 以将其加载到一个 COPY 命令中。
我目前在到达 bzcat 时遇到错误,这是我必须构建执行上述内容的行:
pipeline = [filename[1:3] + " && ", # Change drive to H so that TAR can find the file without a drive name (doesn't like absolute paths, apparently).
'"C:\Tools\GnuWin32\gnuwin32\bin\bsdtar" vxOf ' + filename_nodrive + ' "*.bz2"', # Call to tar, outputs to stdin
" | C:\Tools\GnuWin32\gnuwin32\bin\bzcat.exe"#, # Forward its output to bzcat
' | python "D:\Cloud\Dropbox\Coding\GitHub\pyTwitter\pyTwitter_filehandling.py"', # Extract Tweets
' | "C:\Program Files\PostgreSQL.4\bin\psql.exe" -1f copy.sql ' + secret_login_d
]
module_call = "".join(pipeline)
module_call = "H: && "C:\Tools\GnuWin32\gnuwin32\bin\bsdtar" vxOf "Twitter datastream/Sourcefiles/archiveteam-twitter-stream-2013-01.tar" "*.bz2" | C:\Tools\GnuWin32\gnuwin32\bin\bzcat.exe | python "D:\Cloud\Dropbox\Coding\GitHub\pyTwitter\pyTwitter_filehandling.py" | "C:\Program Files\PostgreSQL.4in\psql.exe" -1f copy.sql "user=xxx password=xxx host=localhost port=5432 dbname=xxxxxx""
执行TAR的代码时,CMD提示符输出TAR文件,提示我一切正常。但是,bzcat 行带来错误:
x 01/29/06/39.json.bz2
bzcat.exe: Data integrity error when decompressing.
Input file = (stdin), output file = (stdout)
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
运行 -tvv 给我:
huff+mtf data integrity (CRC) error in data
我尝试使用 7-zip (GUI) 提取相同的存档:这仍然有效。任何有关如何解决此问题的帮助将不胜感激。我是 运行 Windows 8.1 和 GNUWin32。
bsdtar.exe 是文件数据中的 translating newline 字节进入 DOS CRLF 序列导致损坏的 bzip2 输出流。
GNU tar 在使用相对路径时有效,但它不处理 Windows 中的绝对路径。
您最好的选择是改用 7-zip:
7z.exe x -so -ir!*.json.bz2 archive.tar | bzcat | ...