据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。
当我这样做时:
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
我想我会把文件放在其他地方,但这很奇怪!
我正在寻找一种方法将我所有的 csv 文件插入到 MySQL 中,而无需编写几条LOAD DATA INFILE语句。
我有很多需要插入的 csv 文件,而且文件本身非常大。
我试过了*.csv,但这不起作用。
我继承了一个系统,其中对 MySQL 表的所有更新(甚至是单行/记录)都不是使用UPDATE table_name SET. 相反,它们是通过以下方式完成的:
LOAD DATA ... REPLACE INTO TABLE。这是我第一次看到这种更新表记录的方法,我想知道这样做的理由是什么。
顺便说一句,由于更新时需要锁定 CSV 文件,该方案会导致许多线程同步问题。
LOAD DATA ... REPLACE INTO TABLE我希望得到关于使用而不是 的好处的解释或见解UPDATE table_name SET。
我正在尝试将此 CSV 文件导入 MySQL,该文件似乎可选地由多个字符括起来。不幸的是,MySQL 只支持一个字符作为字段分隔符。
我被困在 SQL 中完成整个过程,因为它是更大程序的一部分 - 所以脚本是不可能的。
数据示例:
reportdata, commission, total, chargeback, company
",123,""$116.00 "",""$604.00 "",""($88.00)"", foo
Run Code Online (Sandbox Code Playgroud)
除了尝试在临时表上执行一堆字符串操作之外,我感到很困惑。
有任何想法吗?
我有一个包含大量数据的 csv 文件,我想将其上传到 mysql 表中。但是,我想保留一列(主 ID)为空,以便我可以自己编辑它。在 mysql 的文档中,它说您可以指定列,但从我的研究来看,您似乎只能指定 csv 文件的列。
那么是否可以指定表的列
根据https://www.sqlite.org/cli.html#csv,
Run Code Online (Sandbox Code Playgroud)sqlite> .mode csv sqlite> .import C:/work/somedata.csv tab1有两种情况需要考虑:(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) 我想将 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
我正在使用 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 2016 结果集(超过 75 GB)转换为 CSV 文件的最佳方法是什么?工程师需要这个输出来寻找相关性。
bcp73.5 GB 文件的路由填满了 tempdb 并开始使其他应用程序崩溃,包括 ETL 进程。
我们的用户希望导出最多 500 GB。
哪个进程会使用最少的资源,以便其他应用程序继续运行?