标签: csv

在 SQLite 上写入一行需要多少次磁盘搜索?

据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。

sqlite csv

7
推荐指数
1
解决办法
389
查看次数

使用 COPY FROM 时 psql 拒绝访问文件

当我这样做时:

COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
Run Code Online (Sandbox Code Playgroud)

关于这一点:

-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
Run Code Online (Sandbox Code Playgroud)

psql 告诉我这个:

ERROR:  could not open file "/my/file.csv" for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)

我怎样才能读取我的文件?谢谢!

- - 更新

看起来apparmor在 Ubuntu 中默认安装了一个叫做的东西。
似乎与评论中提到的 SELinux 具有相同的功能。

- - 更新

删除后apparmor,我仍然遇到同样的问题。 selinux未安装。

关于下面关于访问的评论,COPY FROM 正在从超级用户帐户运行(如果没有,它会给出不同的错误消息)和上面复制的文件权限,我理解为“每个人都可读”。

- - 更新

我试图访问postgres用户下的文件。它卡在树的特定位置

drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm

postgres@dexter:/home/peter/PyPacks$ cd phm

bash: cd: phm: Permission denied

我想我会把文件放在其他地方,但这很奇怪!

postgresql psql csv

7
推荐指数
2
解决办法
5万
查看次数

将所有 csv 文件插入到 MySQL 的表中

我正在寻找一种方法将我所有的 csv 文件插入到 MySQL 中,而无需编写几条LOAD DATA INFILE语句。

我有很多需要插入的 csv 文件,而且文件本身非常大。

我试过了*.csv,但这不起作用。

mysql import csv

7
推荐指数
1
解决办法
4万
查看次数

“LOAD DATA ... REPLACE INTO TABLE”相对于“UPDATE table_name SET”的优点

我继承了一个系统,其中对 MySQL 表的所有更新(甚至是单行/记录)都不是使用UPDATE table_name SET. 相反,它们是通过以下方式完成的:

  1. 将现有表导出到 CSV(文本)文件。
  2. 修改 CSV 文件中的相应行。
  3. 使用 重新加载 CSV 文件LOAD DATA ... REPLACE INTO TABLE

这是我第一次看到这种更新表记录的方法,我想知道这样做的理由是什么。

顺便说一句,由于更新时需要锁定 CSV 文件,该方案会导致许多线程同步问题。

LOAD DATA ... REPLACE INTO TABLE我希望得到关于使用而不是 的好处的解释或见解UPDATE table_name SET

mysql update replace csv

7
推荐指数
1
解决办法
1333
查看次数

带有多个字段分隔符的 MySQL 导入 CSV

我正在尝试将此 CSV 文件导入 MySQL,该文件似乎可选地由多个字符括起来。不幸的是,MySQL 只支持一个字符作为字段分隔符。

我被困在 SQL 中完成整个过程,因为它是更大程序的一部分 - 所以脚本是不可能的。

数据示例:

   reportdata, commission, total, chargeback, company
   ",123,""$116.00 "",""$604.00 "",""($88.00)"", foo
Run Code Online (Sandbox Code Playgroud)

除了尝试在临时表上执行一堆字符串操作之外,我感到很困惑。

有任何想法吗?

mysql import csv

6
推荐指数
1
解决办法
3141
查看次数

使用 mysql 的 load infile 仅填充某些列

我有一个包含大量数据的 csv 文件,我想将其上传到 mysql 表中。但是,我想保留一列(主 ID)为空,以便我可以自己编辑它。在 mysql 的文档中,它说您可以指定列,但从我的研究来看,您似乎只能指定 csv 文件的列。

那么是否可以指定的列

mysql csv

6
推荐指数
1
解决办法
3万
查看次数

SQLite CSV 导入不会自动创建表

根据https://www.sqlite.org/cli.html#csv

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1
Run Code Online (Sandbox Code Playgroud)

有两种情况需要考虑:(1) 表“tab1”以前不存在;(2) 表“tab1”已经存在。

在第一种情况下,当该表以前不存在时,会自动创建该表,并使用输入 CSV 文件第一行的内容来确定该表中所有列的名称。换句话说,如果该表以前不存在,则 CSV 文件的第一行将被解释为列名,实际数据从 CSV 文件的第二行开始。

对于第二种情况,当表已经存在时,CSV 文件的每一行,包括第一行,都被假定为实际内容。如果 CSV 文件包含列标签的初始行,则该行将被读取为数据并插入到表中。为避免这种情况,请确保该表以前不存在。

我试过这个并得到一个错误:

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1
Run Code Online (Sandbox Code Playgroud)

但是,如果我先创建表,那么它“有效”,但我最终会得到一个不需要的标题行,因为它是情况 (2):

$ cd /tmp
$ rm -f database.sqlite3
$ ( echo 'a,b,c' ; echo '1,2,3' ) > somedata.csv
$ sqlite3 database.sqlite3
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .version
SQLite 3.7.13 2012-07-17 17:46:21 65035912264e3acbced5a3e16793327f0a2f17bb
sqlite> .mode csv …
Run Code Online (Sandbox Code Playgroud)

sqlite import csv

6
推荐指数
1
解决办法
6799
查看次数

直接将 csv gzip 文件导入 SQLite 3

我想将 15GB 文件逗号分隔的 gzip 压缩文件导入 Sqlite 3,而不必使用临时文件。

我想运行如下命令:

zcat input/surgical_code.csv.gz | tail -n +2 | sqlite3 db.sqlite ".import /dev/stdin surgical_code"
Run Code Online (Sandbox Code Playgroud)

这会解压缩文件,跳过标题并尝试导入。

问题是我无法在与 SQlite3 相同的引用命令上指定.mode cvs.separator ","

有任何想法吗?

使用$(echo -e 'line1\nline2')对我不起作用:

gzcat input/surgical_code.csv.gz | tail -n +2 | sqlite3 db.sqlite $(echo -e '.mode csv \n .separator \",\"\n.import /dev/stdin')
Run Code Online (Sandbox Code Playgroud)

Error: mode should be one of: ascii column csv html insert line list tabs tcl

sqlite import csv

6
推荐指数
2
解决办法
3798
查看次数

选择一个 CSV 字符串作为多列

我正在使用 SQL Server 2014 并且我有一个包含一列包含CSV字符串的表:

110,200,310,130,null
Run Code Online (Sandbox Code Playgroud)

该表的输出如下所示:

选择结果

我想选择第二列作为多列,将 CSV 字符串的每个项目放在一个单独的列中,如下所示:

预期结果

所以我创建了一个用于拆分字符串的函数:

create FUNCTION [dbo].[fn_splitstring]
(
    @List nvarchar(2000),
    @SplitOn nvarchar(5)
)  
RETURNS @RtnValue table 
(
    Id int identity(1,1),
    Value nvarchar(100)
) 
AS  
BEGIN 
    while (Charindex(@SplitOn,@List)>0)
    begin
        insert into @RtnValue (value)
        select 
            Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))

        set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
    end
    insert Into @RtnValue (Value)
    select Value = ltrim(rtrim(@List))

    return
END
Run Code Online (Sandbox Code Playgroud)

我想像这样使用它:

select Val , (select value from tvf_split_string(cchar1,','))  from table1
Run Code Online (Sandbox Code Playgroud)

但是上面的代码显然行不通,因为该函数将返回多于一行,导致子查询返回多于一个值并破坏代码。

我可以使用类似的东西:

select Val ,
(select value from …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014 csv string-manipulation

6
推荐指数
2
解决办法
8695
查看次数

将非常大的 SQL Server 2016 结果集(超过 75 GB)转换为 CSV 文件?

将非常大的 SQL Server 2016 结果集(超过 75 GB)转换为 CSV 文件的最佳方法是什么?工程师需要这个输出来寻找相关性。

bcp73.5 GB 文件的路由填满了 tempdb 并开始使其他应用程序崩溃,包括 ETL 进程。

我们的用户希望导出最多 500 GB。

哪个进程会使用最少的资源,以便其他应用程序继续运行?

sql-server export bcp csv sql-server-2016

6
推荐指数
1
解决办法
2621
查看次数