- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在给定的SSIS脚本下方,您需要输入一个股票代码和日期范围,然后返回一个CSV格式的下载文件,该文件可用于提取价格历史记录,但它不起作用,我也不知道为什么。在下面的链接中可以找到有关此SSIS深思熟虑概念的完整信息。
SSIS / ETL Example – Yahoo Equity & Mutual Fund Price History
您可以从下面的链接下载示例SSIS包。
Sample package on SkyDrive
以下SSIS脚本任务没有错误,但不会下载文件:
我刚刚开始理解此代码,似乎此链接已细分为此处的组件,并且具有正确的值,它必须可以工作,但我不明白为什么它不检索文件。
ichart.finance.yahoo.com/table.csv?s={symbol}&a={startMM}&b={startDD}&c=
{startYYYY}&d={endMM}&e={endDD}&f={endYYYY}&g={res}&ignore=.csv
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Configuration;
using System.Collections.Generic;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Net;
using System.Collections.Specialized;
using System.Linq;
using Hash = System.Collections.Generic.Dictionary<string, string>;
namespace ST_361aad0e48354b30b8152952caab8b2b.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
static string dir;
static DateTime end;
const string CSV_FORMAT = "Id,Cusip,Date,Open,High,Low,Close,Volume,Adj Close";
public void Main()
{
// end date is today minus one day (end of day)
end = DateTime.Now;
// output directory stored in SSIS variable
// which can be set at runtime
dir = System.IO.Path.Combine(Dts.Variables["OutputCSV"].Value.ToString(), end.ToString("yyyyMMdd"));
if (!System.IO.Directory.Exists(dir))
System.IO.Directory.CreateDirectory(dir);
// connection string to our database
var connectionString = Dts.Variables["ConnectionString"].Value.ToString();
// the sql command to execute
var sql = Dts.Variables["PriceHistorySqlCommand"].Value.ToString();
var list = new List<Hash>();
using (var cnn = new SqlConnection(connectionString))
{
cnn.Open();
using (var cmd = new SqlCommand(sql, cnn))
{
cmd.CommandTimeout = 0;
var dr = cmd.ExecuteReader();
while (dr.Read())
{
// store result in temporary hash
var h = new Hash();
h["cusip"] = dr["cusip"].ToString();
h["symbol"] = dr["symbol"].ToString();
h["product_id"] = dr["product_id"].ToString();
h["last_price_dt_id"] = dr["last_price_dt_id"].ToString();
list.Add(h);
// process batches of 100 at a time
// (This requires System.Threading.dll (CTP of parallel extensions) to be installed in the GAC)
if (list.Count >= 100)
{
System.Threading.Tasks.Parallel.ForEach(list, item =>
{
var dt = item["last_price_dt_id"].TryGetDateFromDateDimensionId(end.AddYears(-100));
DownloadPriceHistory(item["product_id"], item["cusip"], item["symbol"], dt);
});
list.Clear();
}
}
}
}
// TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
}
static void DownloadPriceHistory(string id, string cusip, string symbol, DateTime begin)
{
// get write path
var path = System.IO.Path.Combine(dir, cusip + ".csv");
var url = String.Format("http://ichart.finance.yahoo.com/table.csv?s={0}&d={1}&e={2}&f={3}&g=d&a={4}&b={5}&c={6}&ignore=.csv",
symbol.ToUpper(),
(end.Month - 1).ToString("00"), end.Day.ToString("00"), end.Year,
(begin.Month - 1).ToString("00"), begin.Day.ToString("00"), begin.Year);
string csv;
using (WebClient web = new WebClient())
{
try
{
var text = web.DownloadString(url);
var lines = text.Split('\n');
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int i = 0;
foreach (var line in lines)
{
// skip first line its a header
if (i == 0)
sb.AppendLine(CSV_FORMAT);
// ensure line being added is not null
else if (false == String.IsNullOrEmpty(line) && false == String.IsNullOrEmpty(line.Trim()))
sb.AppendLine(id + "," + cusip + "," + line);
i++;
}
// add header and body
csv = sb.ToString();
}
catch (System.Net.WebException)
{
// 404 error
csv = CSV_FORMAT;
}
}
System.IO.File.WriteAllText(path, csv);
}
}
/// <summary>
/// Some simple extension methods.
/// </summary>
public static class ExtensionMethods
{
/// <summary>
/// Gets a datetime object from a dimension id string for example '20090130' would be translated to
/// a proper datetime of '01-30-2009 00:00:00'. If the string is empty than we default to the passed
/// in <paramref name="defaultIfNull"/>.
/// </summary>
/// <param name="str">The string</param>
/// <param name="defaultIfNull">The default null.</param>
/// <returns>Returns the datetime.</returns>
public static DateTime TryGetDateFromDateDimensionId(this string str, DateTime defaultIfNull)
{
if (String.IsNullOrEmpty(str)) return defaultIfNull;
return DateTime.Parse(str.Substring(4, 2) + "/" + str.Substring(6, 2) + "/" + str.Substring(0, 4));
}
}
}
最佳答案
使用SSIS从Yahoo Finance Chart网站导入报价历史价格:
还有一种使用SSIS将Yahoot Chart网站的股票代码价格历史记录导入数据库的方法。这是使用SSIS 2008 R2
和SQL Server 2008 R2
中的数据库编写的示例软件包
使用SO_14797886.dtsx
创建一个名为(例如Business Intelligence Development Studio (BIDS)
)的SSIS包,并创建一个连接到数据库的OLE DB
连接管理器/数据源。此示例使用数据源OLEDB_Sora.ds
连接到运行实例Sora
的本地计算机上的数据库KIWI\SQLSERVER2008R2
。 KIWI
是计算机名称,SQLSERVER2008R2
是实例名称。
在数据库中执行以下给定脚本以创建两个表。
表dbo.TickerSymbols
将保存有关股票代码列表以及您要导入价格文件的开始和结束日期的信息,以及导入的分辨率。分辨率可以包含d
或day
之类的值; w
表示weekly
; m
表示monthly
;和y
表示yearly
。
表dbo.TickerPriceHistory
将保存从Yahoo Finance Chart网站下载的交易品种的价格历史信息。
插入脚本已为股票代码AAPL
(Apple
)添加了四个记录; MSFT
(Microsoft
); GOOG
(Google
);和YHOO
(Yahoo
)。每个记录都设置有不同的日期范围和分辨率。
创建表并插入少量股票代号的脚本:
CREATE TABLE dbo.TickerSymbols
(
Id int IDENTITY(1,1) NOT NULL
, Symbol varchar(10) NOT NULL
, StartDate datetime NOT NULL
, EndDate datetime NOT NULL
, Resolution char(1) NOT NULL
, CONSTRAINT [PK_TickerSymbols] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
CREATE TABLE dbo.TickerPriceHistory
(
Id int IDENTITY(1,1) NOT NULL
, Symbol varchar(10) NOT NULL
, PriceDate datetime NOT NULL
, PriceOpen numeric(18,2) NULL
, PriceHigh numeric(18,2) NULL
, PriceLow numeric(18,2) NULL
, PriceClose numeric(18,2) NULL
, Volume bigint NULL
, AdjustmentClose numeric(18,2) NULL
, CONSTRAINT [PK_TickerPriceHistory] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
INSERT INTO dbo.TickerSymbols (Symbol, StartDate, EndDate, Resolution) VALUES
('AAPL', '2012-02-01', '2012-02-04', 'd')
, ('GOOG', '2013-01-01', '2013-01-31', 'w')
, ('MSFT', '2012-09-01', '2012-11-30', 'm')
, ('YHOO', '2012-01-01', '2012-12-31', 'y')
;
GO
EndDate
:软件包将使用数据类型为
DateTime
的此变量将在记录集列表中保留正在循环通过的符号的结束日期。
FileExtension
:数据类型为
String
的此变量将保存文件扩展名,以用于下载的文件。这是可选的。
FileName
:数据类型为
String
的此变量将保存给定符号的文件名。该名称是根据时间戳生成的,以避免覆盖以前下载的文件。单击变量,然后按F4查看属性。将属性
EvaluateAsExpression
更改为
True
。在“表达式”上单击“省略号”按钮以打开“表达式生成器”。将
Expression
设置为以下值。该表达式的计算结果类似于
MSFT_20130210_092519.csv
,其中MSFT是符号,其余信息是格式为
yyyMMdd_hhmmss
的包开始时间,而
.csv
是文件扩展名。
FilePath
:数据类型为
String
的此变量将保存给定符号的下载文件的完整路径。单击变量,然后按F4查看属性。将属性
EvaluateAsExpression
更改为
True
。在“表达式”上单击“省略号”按钮以打开“表达式生成器”。将
Expression
设置为值
@[User::RootFolder] + "\\" + @[User::FileName]
。我们将使用此快递
Resolution
:程序包将使用数据类型为
String
的此变量将要循环通过的符号的重解信息保留在记录集列表中。
RootFolder
:数据类型为
String
的此变量将保存文件应下载到的根文件夹。
SQL_GetSymbols
:数据类型为
String
的此变量将包含T-SQL查询,以从数据库中获取股票代码信息。将值设置为
SELECT Symbol, StartDate, EndDate, Resolution FROM dbo.TickerSymbols
StartDate
:程序包将使用数据类型为
DateTime
的此变量在记录集列表中保存循环通过的符号的开始日期。
Symbol
:包将使用数据类型为
String
的此变量来保存股票代码,因为它在记录集列表中的每个记录之间循环。
SymbolsList
:程序包将使用数据类型为
Object
的此变量来保存数据库中存储的股票代号的结果集。
URLYahooChart
:此数据类型为
String
的变量将使用占位符保存指向Yahoo Finance Chart网站的URL,以为查询字符串填写适当的值。将值设置为
http://ichart.finance.yahoo.com/table.csv?s={0}&a={1}&b={2}&c={3}&d={4}&e={5}&f={6}&g={7}&ignore=.csv
Flat File Connection...
General
页上,执行以下操作:
FILE_TickerPriceHistory
Read the ticker symbol price history.
http://ichart.finance.yahoo.com/table.csv?s=MSFT&a=9&b=1&c=2012&d=11&e=30&f=2012&g=m&ignore=.csv
下载了文件,并将其保存为名称
C:\Siva\StackOverflow\Files\14797886\Data\\MSFT_20130210_092519.csv
。
Delimited
。
{CR}{LF}
Column names in the first data row
框
Columns
页面上,确保将行定界符设置为
{LF}
,将列定界符设置为
Comma {,}
。单击高级页面。
Advanced
页上,将基于文件信息创建列。如下所示更改值,以使列名与数据库中的名称匹配。这样,列映射将更容易。除最后一列外的所有列都应将ColumnDelimiter设置为
Comma {,}
。 Lsst列应将ColumnDelimiter设置为
{LF}
。
Column Data type DataPrecision DataScale
------------------- ------------------------------------ ------------- ---------
PriceDate date [DT_DATE]
PriceOpen numeric [DT_NUMERIC] 18 2
PriceHigh numeric [DT_NUMERIC] 18 2
PriceLow numeric [DT_NUMERIC] 18 2
PriceClose numeric [DT_NUMERIC] 18 2
Volume eight-byte unsigned integer [DT_UI8]
AdjustmentClose numeric [DT_NUMERIC] 18 2
Execute SQL Task
拖放到“控制流”选项卡上,然后在“常规”选项卡上执行以下操作。
Get symbols from database
Fetch the list of symbols and its download settings from database.
Full result set
,因为查询将返回记录集。
OLE DB
OLEDB_Sora
Variable
User::SQL_GetSymbols
0
,以指示结果集的索引。从变量名中选择
User::SymbolsList
,将结果集存储到对象变量中。
Script Task
拖放到ForEach循环容器中。双击脚本任务以打开脚本任务编辑器。在“脚本任务”编辑器的“脚本”页面上,单击
ReadOnlyVariables
上的省略号按钮,然后选择下面列出的变量。我们需要在脚本任务代码中使用它们。
Edit Script...
按钮,然后键入以下代码。输入代码后,关闭脚本任务编辑器。
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Net;
namespace ST_5fa66fe26d20480e8e3258a8fbd16683.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
try
{
string symbol = Dts.Variables["User::Symbol"].Value.ToString();
DateTime startDate = Convert.ToDateTime(Dts.Variables["User::StartDate"].Value);
DateTime endDate = Convert.ToDateTime(Dts.Variables["User::EndDate"].Value);
string resolution = Dts.Variables["User::Resolution"].Value.ToString();
string urlYahooChart = Dts.Variables["User::URLYahooChart"].Value.ToString();
string rootFolder = Dts.Variables["User::RootFolder"].Value.ToString();;
string fileExtension = Dts.Variables["User::FileExtension"].Value.ToString();
string fileName = Dts.Variables["User::FileName"].Value.ToString();
string downloadPath = Dts.Variables["User::FilePath"].Value.ToString();
if (!System.IO.Directory.Exists(rootFolder))
System.IO.Directory.CreateDirectory(rootFolder);
urlYahooChart = string.Format(urlYahooChart
, symbol
, startDate.Month
, startDate.Day
, startDate.Year
, endDate.Month
, endDate.Day
, endDate.Year
, resolution);
bool refire = false;
Dts.Events.FireInformation(0, string.Format("Download URL of {0}", symbol), urlYahooChart, string.Empty, 0, ref refire);
WebClient webClient = new WebClient();
webClient.DownloadFile(urlYahooChart, downloadPath);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Download error", ex.ToString(), string.Empty, 0);
}
}
}
}
Data Flow Task
拖放到Foreach循环容器中。将绿色箭头从脚本任务连接到数据流任务。 “控制流”选项卡应如下图所示。
Derived Column Transformation
并使用表达式
Symbol
创建一个名为
(DT_STR,10,1252)@[User::Symbol]
的新列,以将符号添加到数据管道中。
FILE_TickerPriceHistory
,然后按
F4
查看属性。将属性
DelayValidation
更改为
True
。这将确保在运行时对文件存在进行验证。单击表达式上的省略号按钮,并将
ConnectionString
属性设置为值
@[User::FilePath]
。从网站下载每个文件时,这将更改文件路径。
F4
查看属性。将属性
DelayValidation
更改为
True
。这将确保在运行时对文件存在进行验证。
F4
查看属性。将属性
ValidateExternalMetadata
更改为
False
。这将确保在运行时对平面文件是否存在进行验证。
C:\Siva\StackOverflow\Files\14797886
,将保存下载文件的文件夹为空。该文件夹不必为空。这仅用于执行检查。
SELECT * FROM dbo.TickerSymbols;
SELECT * FROM dbo.TickerPriceHistory;
dbo.TickerSymbols
中列出的每个符号的文件
C:\Siva\StackOverflow\Files\14797886
。请注意,每个文件都是根据包中提供的表达式进行适当命名的。
dbo.TickerPriceHistory
表现在应具有从网站下载的价格文件中的数据。
SELECT * FROM dbo.TickerPriceHistory;
关于c# - 如何修复从Yahoo下载报价文件并插入数据库的脚本任务代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797886/
我将一个 div 设置为 100% 宽度,当以 1024 分辨率查看页面时,宽度应从 100% 变为 1000px,我让它与@media 查询一起正常工作,并且在 FF、safari chrome 上
希望有人能帮助我,我已经被困了几天了。 将我的 Domino 服务器更新到 9.01 Fix 3 后,我在 javascript 控制台上不断收到错误消息: TypeError: this.edito
我们正在使用一个基于RMI的java应用程序。当我们运行应用程序时,即使应用程序处于理想阶段,内存使用量仍然不断增加。我们主要使用Vector和散列图数据结构。如何最大限度地减少java内存使用/修复
概述 Internet Download Manager (IDM)是最流行的 Windows 下载管理器。如果你平时工作中使用过IDM,您会惊叹 IDM 下载文件的速度有多快。IDM
当我打开 brave 浏览器时,会打开一个窗口(如下所示)。它并没有真正干扰浏览器的处理。但令人担忧的是为什么这种情况一直发生...... Error On Opening Brave Browser
这是我今天在求职面试中被问到的一个问题: 看下面的代码: int n=20; for (int i =0; i
我不小心删除了/opt/local/bin/perl5.8.9 ,这似乎是 macports 编译的 perl 的主要二进制文件。 现在我有很多取决于 perl5 的端口,但不想卸载并重新安装所有端口
>>>flip fix (0 :: Int) (\a b -> putStrLn "abc") Output: "abc" 这是使用翻转修复的简化版本。 我在一些 YouTube 视频中看到了这种使用
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (64 个回答) 已关闭 3 年前。 我在 Android 应
def main(): cash = float(input("How much money: ")) coins = 0 def changeCounter(n): whil
前一周我遇到了类似的问题,查询需要永远运行。在编写此查询时,我尝试应用从其他查询中学到的一些知识,但执行起来需要很长时间。 运行查询的两个单独部分时,每个部分需要 2 分钟才能完成,这是可以接受的,但
下午,我的 CSS 有问题。第三个下拉菜单放错了,我没有解决办法。 这是我想要的: 之前: http://i53.tinypic.com/2qu85z8.png 之后: http://i51.tiny
更新方法: override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingS
我知道这是一个很多人都遇到过的问题,但我不熟悉 Less 并且是 Bootstrap 的新手,我正在寻找一种全 CSS 解决方案来防止我的导航栏折叠到 768 像素以下:
在我的布局中,我创建了以下 jsfiddle 托管的可调整大小的粘性页脚。但是,在调整大小时它与内容重叠。有没有办法让它在所有浏览器上都能响应? http://jsfiddle.net/9aLc0mg
我想要实现的目标 racer-offset 是为了让用户可以设置图像可以以 px 为单位移动多远。偏移量管理偏移量。 Speed-racer 告诉我们图像在滚动过程中移动的速度。我的问题是它不会停止。
我有一个简单的自动换行函数,它接受一个长字符串作为输入,然后将该字符串分成更小的字符串,并将它们添加到一个数组中,以便稍后输出。现在最后一两个字没有输出。这是主要问题。但是,我还想改进功能。我知道这有
我试图在使用每个 slider 之前禁用“下一步”按钮,我不确定为什么在单击不再是 class="not-clicked"的同一个 slider 时取消禁用该按钮. JSFiddle: (这里看起来有
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 8 年前。 如何让程序输出所有信息? IT
On this page ,在“生活”下有一个带有自动生成的子菜单的菜单。子菜单存在一些问题(它会闪烁并改变大小——如果你滚动它就会看到)。我需要以某种方式覆盖它当前正在读取的 css 并使其统一。
我是一名优秀的程序员,十分优秀!