我有一个来自客户端的非标准化事件日记CSV,我正在尝试将其加载到MySQL表中,以便我可以重构为一种理智的格式.我创建了一个名为"CSVImport"的表,它为CSV文件的每一列都有一个字段.CSV包含99列,因此这本身就是一项非常艰巨的任务:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Run Code Online (Sandbox Code Playgroud)
表中没有约束,并且所有字段都包含VARCHAR(256)值,但包含计数(由INT表示),是/否(由BIT表示),价格(由DECIMAL表示)和文本blurbs(由TEXT代表).
我试图将数据加载到文件中:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL …Run Code Online (Sandbox Code Playgroud) 我是一个迁移的Eclipse IDE用户,我正在学习IntelliJ IDEA 9.
默认情况下,Eclipse IDE将不会使用星号导入,直到从同一个包导入99个类,因此它几乎不会发生.
但IntelliJ IDEA似乎太热衷于这样做了,我无法弄清楚如何禁用它.
例如,在输入+ JList然后自动导入之后,将导入整个包而不是我指定的类.ALTENTERjavax.swing
我尝试javax.swing从自动完成中排除,但这只会阻止任何 Swing类的建议,这会适得其反.
或者:什么不是T-SQL语句?
除了解决歧义之外,T-SQL语法不需要分号来终止语句.尽管如此,Itzik Ben-Gan建议使用分号来终止T-SQL语句,因为它使代码更清晰,更易读,更易于维护,更便于携带.
我不知道有效的T-SQL语句是什么的精确定义,所以我可能会在这里感到困惑.但据我所知,BEGIN ... END块是一个T-SQL语句,因此应以分号结束.例如:
IF OBJECT_ID('tempdb.dbo.#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable;
END;
Run Code Online (Sandbox Code Playgroud)
Microsoft的BEGIN ... END文档中的代码示例支持此猜想:
USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION;
GO
IF @@TRANCOUNT = 0
BEGIN
SELECT FirstName, MiddleName
FROM Person.Person WHERE LastName = 'Adams';
ROLLBACK TRANSACTION;
PRINT N'Rolling back the transaction two times would cause an error.';
END;
ROLLBACK TRANSACTION;
PRINT N'Rolled back the transaction.';
GO
/*
Rolled back the tranaction.
*/
Run Code Online (Sandbox Code Playgroud)
Itzik Ben-Gan在T-SQL Fundamentals的练习1-1的代码示例中与此相矛盾:
SET NOCOUNT ON; …Run Code Online (Sandbox Code Playgroud) 我被告知使用Java try-catch机制会有一些开销.因此,虽然有必要在try块中放置抛出checked异常的方法来处理可能的异常,但是在性能方面优化的做法是限制try块的大小以仅包含那些可能抛出异常的操作.
我不太确定这是一个明智的结论.
考虑以下两个实现处理指定文本文件的实现.
即使第一个产生一些不必要的开销是正确的,我发现它更容易遵循.通过查看语句来确定异常的确切位置尚不清楚,但评论清楚地表明哪些陈述是负责任的.
第二个比第一个更长更复杂.特别是,第一个很好的读行成语必须被修改以使readLine调用适合try块.
在函数中处理异常的最佳实践是什么?在定义中可能抛出多个异常?
这个包含try块中的所有处理代码:
void processFile(File f)
{
try
{
// construction of FileReader can throw FileNotFoundException
BufferedReader in = new BufferedReader(new FileReader(f));
// call of readLine can throw IOException
String line;
while ((line = in.readLine()) != null)
{
process(line);
}
}
catch (FileNotFoundException ex)
{
handle(ex);
}
catch (IOException ex)
{
handle(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这个只包含在try块中抛出异常的方法:
void processFile(File f)
{
FileReader reader;
try
{
reader = new FileReader(f);
}
catch (FileNotFoundException ex)
{
handle(ex); …Run Code Online (Sandbox Code Playgroud) 是否有一个工具可以与SQL Server一起使用,从分层数据模型生成树状图?
我正在使用大型地理层次结构,并希望将其可视化.
这是一个例子.
我有一个NodeHierarchy表,存储节点之间的层次关系.表中的每一行代表一个节点.除一个节点外,每个节点都有一个父节点 没有父节点的节点是层次结构的根节点.
以下是我创建表格的方法:
CREATE DATABASE HierarchyTest;
GO
USE HierarchyTest;
GO
CREATE TABLE NodeHierarchy (
PK_NodeID INT NOT NULL
CONSTRAINT PK_NodeHierarchy PRIMARY KEY,
FK_ParentNodeID INT NULL
CONSTRAINT FK_NodeHierarchy_NodeHierarchy FOREIGN KEY
REFERENCES NodeHierarchy(PK_NodeID),
Name NVARCHAR(255) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我有一个苏格兰城市和场地的例子.苏格兰是层次结构的根源.苏格兰的后裔是城市和场所.在这个家庭中,父母"包含"一个孩子,所以我们说例如"Barrowlands在格拉斯哥,格拉斯哥在苏格兰".
此语句使用eample数据填充NodeHierachy表:
INSERT INTO NodeHierarchy(PK_NodeID, FK_ParentNodeID, Name)
VALUES
(1, NULL, N'Scotland'),
(2, 1, N'Glasgow'),
(3, 1, N'Edinburgh'),
(4, 1, N'St Andrews'),
(5, 2, N'The Barrowlands'),
(6, 2, N'The Cathouse'),
(7, 2, N'Carling Academy'),
(8, 2, N'SECC'),
(9, 2, N'King Tut''s …Run Code Online (Sandbox Code Playgroud) 根据我对支持该功能的语言的体验,使用命名参数而不是位置参数调用函数的程序更易于阅读和维护.
我认为Perl有这个功能,但它不适合我.
这是我正在使用的包裹的怪癖,还是我做错了?
我的第一个Perl项目是使用HTML :: TableExtract包从HTML标记中提取表数据并将其显示为文本.
以下代码设置解析器:
use strict;
use warnings;
use HTML::TableExtract;
my $markup = <<MARKUP;
<table>
<tr> <th>a</th> <th>b</th> <th>c</th> </tr>
<tr> <td>1</td> <td>2</td> <td>3</td> </tr>
<tr> <td>4</td> <td>5</td> <td>6</td> </tr>
</table>
MARKUP
my $parser = HTML::TableExtract->new() ;
$parser->parse($markup) ;
Run Code Online (Sandbox Code Playgroud)
该文件说,我可以使用输出转储到命令提示符tables_dump方法和使用参数$show_content和$col_sep控制输出格式:
tables_report([$show_content, $col_sep])返回一个字符串,汇总提取的表格及其深度和计数.可选择使用$ show_content标志,该标志将转储每个表的提取内容以及由$ col_sep分隔的列.默认$ col_sep是':'.
tables_dump([$show_content, $col_sep])与tables_report()相同,但将信息转储到STDOUT.
如果我按文档顺序传递位置参数,我得到我期望的输出:
$parser->tables_dump(1, '_') ;
Run Code Online (Sandbox Code Playgroud)
列由下划线而不是默认冒号分隔:
TABLE(0, 0):
a_b_c
1_2_3
4_5_6
Run Code Online (Sandbox Code Playgroud)
在Perl.com的高级子例程文章之后,我尝试传递包含参数名称和值的哈希,以阐明参数的含义:
$parser->tables_dump({show_content => 1, col_sep => …Run Code Online (Sandbox Code Playgroud) 所以以下让我感到困惑.
#!/usr/bin/python
test = [0, 0, 0, 1, 2, 3, 4, 5, 6]
test1 = [0, 0, 0, 1, 2, 3, 4, 5, 6]
for _dummy in test:
if(_dummy == 0):
test.pop()
for _dummy in test1:
if(_dummy == 0):
test1.pop(0)
print test
print test1
Run Code Online (Sandbox Code Playgroud)
结果
ubuntu-vm:~/sandbox$ ./test.py
[0, 0, 0, 1, 2, 3]
[0, 1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
也许,我从根本上误解了pop的实现方式.但我的理解是,它删除列表中给定索引处的项目,并返回它.如果未指定索引,则默认为最后一项.所以看起来在第一个循环中它应该从列表的左边删除3个项目,而在第二个循环中它应该从列表的末尾删除3个项目.
在我的SSIS项目文件夹中,除了我创建的三个包(.dtsx)文件之外,我还有额外的文件.有一个ProjectName.database文件,一个ProjectName.dtproj文件和一个ProjectName.dtproj.user文件.
构建项目时,dtsx文件将复制到项目文件夹中名为"bin"的文件夹中.
当我创建部署清单时,三个包文件将被复制到名为"bin/Deployment"的文件夹以及新的ProjectName.SSISDeploymentManifest文件.
我应该检查哪些文件来源代码控制?
我认为只有三个包文件和部署清单对我有用.
SSIS中没有标准的控制流任务来通过HTTP下载文件.我已经尝试了一些解决方法(执行进程wget,脚本任务HttpClientConnection),但得出结论,执行此任务的最强大和可重用的方法是创建自定义组件.
我试图通过遵循Ray Gorski的指南来做到这一点,但在我的开发环境中遇到了问题.
问题是Visual Studio 2008无法识别Microsoft.SqlServer.Dts命名空间.它抱怨错误消息"命名空间'Microsoft.SqlServer'中不存在类型或命名空间名称'Dts'(你是否缺少程序集引用?)".
我在MSDN论坛上找到了建议,说你可以通过添加ManagedDTS.dll找到 的程序集来添加引用C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\,但是我的系统上不存在此目录.我认为这是因为我使用的是SQL Server 2008而不是SQL Server 2005.
我该如何解决这个问题?
这是我的代码,它基于Ray Gorski指南中的示例.这里没有代码可以实际完成我的任务,只是一个空的存根,它不能编译.
using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Design;
namespace HTTPControlTask
{
[DtsTask(
Description = "HTTP",
DisplayName = "HTTP",
TaskContact = "Iain Elder",
TaskType = "SSIS Help Task",
RequiredProductLevel = DTSProductLevel.None)]
public class HTTPControlTask : Task, IDTSComponentPersist
{
}
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试编译时看到的错误的屏幕截图:

在用于数据子集交互式分析的脚本中,将查询结果存储到临时表中以供进一步分析通常很有用。
我的许多分析脚本都包含以下结构:
CREATE TABLE #Results (
a INT NOT NULL,
b INT NOT NULL,
c INT NOT NULL
);
INSERT INTO #Results (a, b, c)
SELECT a, b, c
FROM ...
SELECT *
FROM #Results;
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 中,临时表是连接范围的,因此在初始查询执行后查询结果仍然存在。当我要分析的数据子集计算成本很高时,我使用此方法而不是使用表变量,因为该子集在不同的查询批次中持续存在。
脚本的设置部分运行一次,并SELECT * FROM #Results根据需要经常运行以下查询(此处为占位符)。
偶尔,我想刷新临时表中的数据子集,所以我再次运行整个脚本。一种方法是通过将脚本复制到 Management Studio 中的新查询窗口来创建新连接,我发现这很难管理。
相反,我通常的解决方法是在 create 语句之前添加一个条件 drop 语句,如下所示:
IF OBJECT_ID(N'tempdb.dbo.#Results', 'U') IS NOT NULL
BEGIN
DROP TABLE #Results;
END;
Run Code Online (Sandbox Code Playgroud)
该语句正确处理了两种情况:
我编写的生产脚本总是使用这种方法,因为它在两种预期情况下都不会引发错误。
我的开发人员编写的一些等效脚本有时会使用异常处理来处理这两种情况:
BEGIN TRY DROP TABLE #Results END TRY BEGIN CATCH END …Run Code Online (Sandbox Code Playgroud) java ×2
sql-server ×2
ssis ×2
t-sql ×2
autocomplete ×1
csv ×1
diagramming ×1
mysql ×1
perl ×1
python ×1
readability ×1
stack ×1