mysql - 将数据从多个 CSV 加载到 MySQL
问题描述
我正在尝试将多个 csv 文件加载到 mysql 中以创建这些多个文件的单个表。我在mysql中加载了一个名为symbols的表,其中有一列名为ticker,所有行值都代表A、B、C等符号。我想循环这些行以创建一个路径,/path/A.csv
以便我可以阅读来自所有这些文件的数据以创建新表 all_tickers。
之前我在 SQL Server 中使用以下代码执行此操作:
CREATE TABLE dbo.all_tickers
(
ticker_symbol varchar(32) NOT NULL,
[Date] datetime2(7) NOT NULL,
[Open] float NULL,
High float NULL,
Low float NULL,
[close] float NULL,
Volume float NULL,
PRIMARY KEY (ticker_symbol, [Date])
);
GO
DECLARE @Path nvarchar(255) = 'D:\ASX';
DECLARE @SQL nvarchar(MAX);
CREATE TABLE #ticker_staging
(
[Date] datetime2(7) NOT NULL,
[Open] float NULL,
High float NULL,
Low float NULL,
[close] float NULL,
Volume float NULL
);
SET @SQL = (SELECT N'
TRUNCATE TABLE #ticker_staging;
BULK INSERT #ticker_staging
FROM ''' + @Path + N'\' + ticker + N'.csv''
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '','', --CSV field delimiter
ROWTERMINATOR = ''\n'', --Use to shift the control to next row
TABLOCK
);
INSERT INTO dbo.all_tickers WITH (TABLOCKX)(
ticker_symbol,
[Date],
[Open],
High,
Low,
[close],
Volume
)
SELECT
''' + ticker + N''',
[Date],
[Open],
High,
Low,
[close],
Volume
FROM #ticker_staging;'
FROM dbo.symbols
FOR XML PATH(''), TYPE).value('.',N'nvarchar(MAX)');
EXECUTE sp_executesql @SQL;
GO
为了在 MySQL 中复制结果,我将上面的代码更改为如下:
CREATE TABLE dbo.all_tickers
(
ticker_symbol varchar(32) NOT NULL,
Date datetime NOT NULL,
Open float NULL,
High float NULL,
Low float NULL,
close float NULL,
Volume float NULL,
PRIMARY KEY (ticker_symbol, Date)
);
set @Path = 'D:\ASX';
set @SQL = nvarchar(MAX);
CREATE TABLE #ticker_staging
(
Date1 datetime NOT NULL,
Open float NULL,
High float NULL,
Low float NULL,
close float NULL,
Volume float NULL
);
SET @SQL = (SELECT N'
TRUNCATE TABLE #ticker_staging;
LOAD DATA INFILE #ticker_staging
FROM ''' + @Path + N'\' + ticker + N'.csv''
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '','', #CSV field delimiter
ROWTERMINATOR = ''\n'', #Use to shift the control to next row
TABLOCK
);
INSERT INTO dbo.all_tickers WITH (TABLOCKX)(
ticker_symbol,
[Date],
[Open],
High,
Low,
[close],
Volume
)
SELECT
''' + ticker + N''',
[Date],
[Open],
High,
Low,
[close],
Volume
FROM #ticker_staging;'
FROM dbo.SCRIP
FOR XML PATH(''), TYPE).value('.',N'nvarchar(MAX)');
EXECUTE sp_executesql @SQL;
我在处理WITH
SQL Server 中用于将其转换为 MySQL 的子句时遇到问题。
由于我是 MySQL 新手,我认为这是主要问题。如果代码中还有其他问题,请提出建议。
解决方案
推荐阅读
- android - 如何在 EditText 中用逗号分隔数字
- javascript - 两个视觉上相同的文本位如何与剪贴板不同?
- javascript - 使用 Javascript 解析本地文件中的 JSON 数组时出现问题
- python - 如何在numpy中找到每行中最大值的索引,行的连接?
- .htaccess - htaccess | 仅将查询应用于 url 的一部分
- java - 使用 onMouseClicked 方法时如何获取 ImageView 的 ID?
- c++ - 一个简单的递归问题来模拟计算机病毒的传播
- python - 在 Windows 的 anaconda 提示符下访问 root
- python - 如何使用所有 CPU 对大量文件进行子处理?
- r - geom_line 只连接一些点