为什么在Windows上通过Powershell将数据加载到Docker中的clickhouse时会出现换行错误?
我正在尝试将数据加载到windows docker desktop中内置的docker容器中的clickhouse中。我在R中准备模拟数据,以csv形式编写,在clickhouse中创建表格,我正在创建连接:为什么在Windows上通过Powershell将数据加载到Docker中的clickhouse时会出现换行错误?,r,powershell,docker,clickhouse,R,Powershell,Docker,Clickhouse,我正在尝试将数据加载到windows docker desktop中内置的docker容器中的clickhouse中。我在R中准备模拟数据,以csv形式编写,在clickhouse中创建表格,我正在创建连接: library(dplyr) library(data.table) library(clickhouse) setwd("C:/Users/xxxx/Documents/testing_load") my_df = data.table(datetime = as.character(c
library(dplyr)
library(data.table)
library(clickhouse)
setwd("C:/Users/xxxx/Documents/testing_load")
my_df = data.table(datetime = as.character(c("2018-01-01 11:21:00", "2019-01-01 11:45:00")))
c(2018, 2019) %>%
lapply(function(y) {
print(y)
fwrite(my_df[substr(datetime,1,4) == y],
paste("test_",y,".csv"),
row.names = F,
col.names = F
)
})
dbSendQuery(con,
paste(
"CREATE TABLE test(
datetime DateTime
) ENGINE = Log;"
)
)
我试图加载的数据非常庞大,因此这只是一个示例,用于显示设置以及我在第一行中出错的原因。我想使用powershell中的clickhouse client加载数据,访问docker容器,如下所示:
#loop through files and load
$files = Get-ChildItem "C:\Users\xxxx\Documents\testing_load"
foreach ($f in $files){
$outfile = $f.FullName | Write-Host
Import-Csv –Delimiter "," $f.FullName | Write-Host
Get-Date | Write-Host
"Start loading" + $f.FullName | Write-Host
docker run -it --rm --link chanalytics:clickhouse-server yandex/clickhouse-client --host clickhouse-server clickhouse-client --query="INSERT INTO test FORMAT CSV"
Get-Date | Write-Host
"End loading" + $f.FullName | Write-Host
}
我还添加了读取数据的功能,以防出现问题,但clickhouse在日期时间方面出现了错误。我试过在R中切换到positxc,但没有任何区别。我不知道,但我觉得这是一件非常简单的事情,我不理解。下面是我得到的错误:
打开excel我可以看到datetime的日期格式很好。对可能发生的事情有什么建议吗?我能够解决这个问题:
#loop through files
$files = Get-ChildItem "C:\Users\xxxx\Documents\testing_load"
foreach ($f in $files){
$outfile = $f.FullName | Write-Host
Get-Date | Write-Host
"Start loading" + $f.FullName | Write-Host
cat $f.FullName | docker run -i --rm --link chanalytics:clickhouse-client yandex/clickhouse-client -m --host chanalytics --query="INSERT INTO tpep FORMAT CSV"
Get-Date | Write-Host
"End loading" + $f.FullName | Write-Host
}
我对ClickHouse一无所知,但请注意,Write Host用于写入显示器,而不是写入数据,尽管外部进程也会通过标准输出看到Write Host输出。docker启动的流程应该如何接收输入?您没有向它传输任何数据。错误似乎表明您的输入包含文字字符串,而不是LF字符。你验证了文本来自哪里了吗?嘿,李,我可以确认文件在那里,在这个例子中,我正在循环读取两个文件并加载到clickhouse。我在excel中打开了它们,可以看到datetime格式,正如您在R代码中看到的那样,我只是使用了一个名为datetime的列。@LoF10:您的PowerShell代码与您正在发出的docker命令没有关联,因为您没有向它提供标准输入,而在PowerShell中需要管道|,所以,让我再问一次:您如何期望您在PowerShell代码中所做的任何事情能够到达“插入测试格式CSV”命令?@LoF10:如果您参与了一个对话,而不是先忽略反馈,然后以侮辱的方式回应,您可能已经意识到,我一直在向您指出正确的方向——需要通过管道向docker命令提供stdin输入。我不明白你的docker命令的细节,但我知道有些东西不见了。您只需做一个简单的澄清——需要将文件内容通过管道传输到docker命令——就可以更快地解决这个问题。