Thursday, July 7, 2011

优化的 LookUp Transformaction (zt)

在介绍 Lookup Transformation 之前,我们先熟悉一下两个英文词汇:
  1. Lookup 表:   即需要导出数据的数据源表 (或视图)
  2. Reference 表:即在Lookup 操作中使用的数据表(或查询)
Lookup Transformation 是 SSIS 中应用最为广泛的 Transformation 之一,它用于实现类似于 SQL 语句中个 INNER JOIN 功能,在建设数据仓库过程中,更是产生 Surrogate Key 必不可少的组件。根据 SSIS 2005 实际应用中开发人员的反应,Microsoft 在 SSIS 2008 中对 Lookup Transformation 的性能做了很重要的改动,增加了一个共享文件类型的Cache,文件Cache 是将 Reference表的记录存放在一个文件中可以供所有使用同一Reference表的Lookup 使用,并且基本上不消耗额外的内存,所以这种方式能处理很大的Reference 表,更加适应企业级的ETL 开发。SSIS 2008 支持三种类型的 Cache:
  • Full Cache,   默认情况下,Lookup 使用Full Cache 模式。在这种模式下,所以的Reference 表的记录将被一次性地导入到内存中,在以后的处理中将 SSIS 将在内存中调用 Reference 表的内容。这种方式将会使用大量的内存,并且不需要 Reference 表提前建立索引,整个的传输处理将在所有的Reference记录导入到内存后开始。当 Reference Table 记录数很大的时候,这种方式最快,但需要大容量内存的支持。
  • Partical Cache,在最初始状态下,Cache 是空的。数据流操作从Lookup 表数据源读取一条新纪录到内存后,首先查找Cache中符合条件的 Reference 表的记录,如果没有找到,则从Reference 表的数据源中查找,并将查到的记录加如到Cache 中。这种方式不等待 Reference 表中的所有记录导入到Cache中再开始数据流操作,而是立刻进行数据从数据源到目标的传输。当 Lookup 表中的对应Reference 表的外键不是很大的时候,这种方式很快。
  • No Cache,不使用Cache。这是速度最慢的一种 Lookup, 当系统内存不足以建立Cache的时候使用。但是由于 SSIS 2008 怎加了文件Cache的功能,所以这种方式的Cache用途不大。
下面的图就是SSIS 2008 中Lookup Transformation 的属性编辑界面。
SSIS2008-1
在图中,只有当选择 Full cache 模式的时候,才可以使用 Cache connection manager, 这种情况下将使用一个预先建立好的Cache文件作为Reference 表,而不是从Reference的数据源读取数据,这种方式将直接使用Cache 文件,而不需要再将Cache 文件读到内存中。于此不同,如果使用 OLE DB connection, 将会建立和使用 OLE-DB 连接到 Reference 表,所有的记录读入内存中形成Cache。
使用 Full Cache 模式下的文件Cache 有下面的几个好处:
  1. 节约内存,因为使用文件Cache, 并不会在内存中形成Cache。Cache 文件是一个索引了的特殊的文件格式,所以读取速度也很快。
  2. 共享文件Cache, 如果很多数据流操作使用同一个Reference 表,可以共享这个文件Cache, 而不需要为每一个数据流单独建立相同的Reference 表。
下面通过一个例子,我来介绍使用SSIS 2008 的这个新的功能。
  •  从AdventureWorks 选择两个表:HumanResources.Employee 和 Person.Contact, 这两个表的关联如下图所示:
SSIS2008-21
  • 在图中,ContactID 做为外键连接了Employee,VendorContact 和 Contact 表, 我们可以用一个简单的SQL 查看它们的关联:
SELECT con.FirstName,con.LastName,emp.EmployeeID,emp.BirthDate,emp.gender
FROM HumanResources.Employee emp
INNER JOIN Person.Contact con ON emp.ContactID = con.ContactID
假设我们要把记录导出到SSISTraining Database下的一个新表:NewEmployee 表,这个新的表包含了Employee 和 Contact 两个表的内容:
USE [SSISTraining]
GO
CREATE TABLE [dbo].[NewEmployee]
(
[EmployeeID] [int] PRIMARY KEY NOT NULL,
[FirstName] [nvarchar] (50) NULL,
[LastName] [nvarchar] (50) NULL,
[BirthDate] [datetime] NULL,
[gender] [nchar] (1) NULL
)
GO
下面我们就来用这个例子来演示 SSIS 2008 的这个新的功能
  1. 新建一个SSIS 项目,把默认的SSIS Package 修改为CreateNewEmployee
  2. 使用OLEDB 建立到两个数据库的连接,分别命名为:AdventureWorks 和 SSISTraining
  3. 将第一个 Data Flow Task 添加到Control Flow 页面中,并将其命名为 Create Cache File
  4. 双击这个数据流任务,将一个 OLEDB Source 添加到 Data Flow 页面中,设置其OLE DB connection manager 为 AdventureWorks,并使用下面的SQL 语句获得数据:
  5. SELECT ContactID,FirstName,LastName from Person.Contact
  6. 从工具箱中的 Data Flow Transformations 选择 Cache Transformation 并将其添加到 Data Flow 页面中,双击这个 Cache Tranformation进行编辑。
  7. 首先需要建立一个到 cache 文件的连接,这个特殊的连接用来连接到特殊的Cache 文件,文件的扩展名必须为 caw.
  8. ssis-lookup1
  9. 在图中,选中 Use file cache,并将文件名设置为 C:\MyCache.caw,然后再单击 Columns 页面选择适当的关键值列。在我们的例子中,pipeline 中有三个列:ContactID,FirstName 和LastName, 其中FirstName 和 LastName 是需要返回值的列,而 ContactID 是需要和Lookup 表进行Join 的列,这个列通常叫做 Key,这个Key 列(或列的组合) 需要在图中Index Position 中赋予一个序号,表示我们需要按Key 列进行排序,第一个列从1 开始,如果有三个Key 列,那么他们的Index Position将分别是1,2,3.
    ssis-lookup2
  10. 保存以上的设置后,我们还需要在图中设定 Cache 文件和源数据的映射关系:
    ssis-lookup3
  11. 保存以上的设置。完成了的 Data Flow 页面如下图所示:
    ssis-lookup4
  12. 上面的操作将在运行中将Reference 表的内容存放在Cache 文件中,下面的步骤用来访问这个 Cache 文件。在 Control Flow 页面中再加入第二个Data Flow Task,将这个新的Control Flow 命名为 Load Employee Table,双击打开它的 Data Flow 页面;
  13. 首先使用一个 OLE DB 数据源连接到 AdventureWorks 下的 HumanResources.Employee 表,使用下面的SQL 语句从表中取得记录:
  14. SELECT  EmployeeID, ContactID, Gender, BirthDate  FROM  HumanResources.Employee
  15. 然后再将一个 Lookup Transformation 添加到 Data Flow 页面中,连接 OLEDB 数据源到到这个 Lookup Transformation,双击 Lookup 打开 Lookup Tranformation 设置页面。在General 页面中选择 Full Cache 下的 Cache Connection Manager 连接类型;在 Connection 页面下选择刚刚建立的 Cache 文件连接;在 Columns 页面中选择 ContactID 作为Lookup 列,Firstname 和 Lastname 作为返回值的列。
  16. 保存并运行这个SSIS Package。
结论
    当Reference 表非常大的时候比如说1G 以上,使用 Cache lookup 会占用非常少的内存,并且Cache 文件可以被多个Lookup 共享而不消耗更多的内存。Cache Lookup 是 SSIS 2008 中一个最重要的性能提高,它使得SSIS 更加适应大数据的ETL 处理。
我们同时制作了本例操作的视频教程,欢迎访问:www.bridata.ca/training

Wednesday, July 6, 2011

Day Trading-下单 (转载)

常用的下单有以下几种:

1 Market:按市价的bid/ask,多成交于ask附近,如broker有心将你的order 多hold 几秒,将ask价up tick,成交时会高于下单时的最高价。

2 Limit:设个固定价位希望在此成交(见附图)

多单有两点需谨记:
(1)未持有股票时是用于现价之下(买)。
已持有股票后则用于现价之上(卖)。
(2)在未持有股票是下tick。即limit或limit之下成交。
在已持有股票是上tick。即limit或limit之上成交。
Short则相反。

3 Stop:在所给的stop价位到达后转成market order。

用法则与Limit完全相反(见附图)
这种单广为人知的是做为stop loss用。实际上作用不止于此。

4 Stop limit:结合stop与limit,所以有两个价钱。

即stop价+限定一个limit的范围,希望成交在stop但不能超过limit的范围。
我【忆苦思甜】提到股票开盘遇大跳空。如开盘价低于设定的Stop Loss就执行,可能比你预期承受的低很多。此单可在开盘大幅跳空时避免卖在超过预期的价位。
另外大跳低后可能就是地板价,常有反弹。所以在stop后加个limit-最低承受价,低于它就不卖了。
我想此单day trading在intraday几乎没用。但如用作stop buy limit倒有可取之用。整体说,这种单用处不大,可略去。


论成交速度和稳定度,1-4递减。Stop(含stop limit)单时有交易不成。会出现股价下去未成交,反弹回来却成交。

至于Break even,是本人一种trading stratagy,并非一种order。
BE的操作比很多人知道的要复杂一点,也有用的多。



下单是Trading stratagy的重要一环

1 Order type 就那几种,很简单,大家都很熟悉。

2 但简单中蕴育者大学问,不但新手,老手也不一定运用自如。
像我做股票10多年后也没搞情limit,stop的用法。DT后研习多年,至今也没得心应手。

3 大多数人并非职业,交易有限,时间不多,用market下单足已,简单快捷。

4 而day trading或交易多的人,每月少则交易一俩百,这差价可比broker的佣金多很多,不得不查。

5 试想:bid/ask如差价5c,用limit在bid价可省5c,500股省25元。股市中>10c的股票很常见。

6 我尽量 BUY limit bid, SHORT limit ask,少用market。

7 那看官说了:“用bid price下买单怎么可能成交?”

8 回看官的话:没错,是买不到。但如换一种方式,
(1)如果多一分耐心稍微等一会
(2)如果不在股票上涨人人争先时去抢

9 常会遇到当某股票走强时,会产生一种莫名其妙的冲动,赶紧market买进,生怕赶不上这趟车。
但不久股价又回到买价之下几分钱。这说明当初如放bid limit是可能成交的。
另外bid limit是下tick,如成交可能会比你想的还要少1-2分钱。

10 Limit单不但省一些bid/ask差价,最为重要的是:
下单和每人的trading stratagy息息相关。涉及到交易的核心:如何精进-进点和出点。
很多人在Day Trading中好买新高(前波段高,当日高,两日高等)的突破,自然limit不成。

11 如果你的战略是避其锋芒,等弱下来或拉回再进就完全不同了。

12仅举几例:
(1)趋势确定后,小线小量,芝麻绿豆,“于无声处听惊雷”,放limit。
(2)晃人。既是晃人,现价位还会晃下来,limit 总比market强。
(3)即使上升中,tick仍是进两步,退一步,这退的一步会触发你的bid Limit。
(4)强势也要喘口气,当down tick时,limit成。
(5)拉回时,在某个关键低价点放limit,等。
(6)耐心。很多时宁停三分,不抢一秒,tick稍微下拉,limit成。
注意,拉回是上升趋势,和下降趋势不同,下降中相对名词是反弹。

13 了解下单方法对上班族也有用处。如stop buy order可让新高突破自动成交。让人依计而行play smart!

江恩入出市守则

1。每次入市买卖,损失不得超过投入的10%。
2。任何买卖必须设定最后停损点。
3。永不过渡投资,杠杆式买卖要在安全范围之内。
4。永不让所持舱位专赢为亏。
5。不和市场对抗,不逆市操作,一发觉做错及时反仓。
6。有怀疑,即平仓离场。
7。只在活跃的市场买卖,避免进入欠透明度及成交量少的市场。
8。在单边市不宜限价买卖。
9。如无适当理由,勿将所持仓盘平仓,可以用止损位保障所得利润。
10。在买卖遭损时,切忌加码。
11。不要因为不耐烦而入市,也不要因为不耐烦而平仓。
12。入市后定下得止损盘,不宜随便取消。
13。揸沽自如,不应只做单边。
14。不要把所有资金投资于一个项目,但也不宜太过分散投资。
15。投资组合坚决执行汰弱留强才能跑赢大市。
16。揣摩市场群众的心理和做法,而制定出更好的策略。
17。耐心等待胜算高的机会到来时全力一击。
18。承认看错市势机会高出1/3,做错方向时尽早止损,不宜用锁仓的办法逃避风险。

Tuesday, July 5, 2011

SSIS: Update data from different table if data is Null

source: http://redsouljaz.com/2009/11/30/ssis-update-data-from-different-table-if-data-is-null/

1st Table is Person.Address and 2nd table is Address2
Now I want to update data in column AddressLine2 in Person.Address by using data in Address2 with condition that AddressID is same and AddressLine2 in Person.Address is Null
So 1st we create Data Flow Task in Control Flow tab

Create new Ole DB Connection in Connection manager, and add the flow that looks like below figures
In the OLE DB Source, add the table Person.Address
In the Lookup, Add table Address2. In the column tab at the lookup editor set like this:
So this Lookup transformation is actually add a new column from other table based on addressed.
The Derived Column transformation creates new column or replacing current column values by applying expressions to transformation input columns. An expression can contain any combination of variables, functions, operators, and columns from the transformation input. So from we need this to replace the new column (AddressLine2) from table Address2 into column AddressLine2 in table Person.Address
First we choose Replace ‘OLE DB Source.AddressLine2’ in Derived Column, then we add expression:
(ISNULL([OLE DB Source].AddressLine2) ? Lookup.AddressLine2 : [OLE DB Source].AddressLine2)
The OLE DB Command transformation runs an SQL statement for each row in a data flow. For example, you can run an SQL statement that inserts, updates, or deletes rows in a database table. So in this case, we need this transformation to update current data.
In Advanced Editor for Ole DB Command, in the component properties add SQL Command:
update Person.Address set AddressLine2 = ?
where AddressID = ?

Question mark indicate the parameter. Just remember the sequence of the parameter.
After we fill in the Sql Command, choose Column Mappings Tab and point the Available input columns to the Available Destination Columns based on the parameter that already created.
Then execute the package
Result:

Disable windows genuine advantage notifications installation wizard (Tested with Winxp)

1. Open IE and go to Windows Update site directly: http://www.windowsupdate.com
2. Click "Custom Install" to scan your system (Not Express Install).
3. After it finishes, please choose the update which you want to hide on the right pane and check the box "Don't show this update again".
(Note: If the checkbox "Don't show this update again" is grayed out, please first unselect the update.)
4. Restart the computer and this update should not be offered again.

Or,
If you want to get rid of the WGA wizard prompt that pops up during start up. just delete the annoying thing.
Goto   DriveLetter:\windows\system32  and delete the folder named KB905474.. no more annoyances.. Might be a good idea not to download anymore annoying things from Microsoft.

Monday, July 4, 2011

Automate Backup of Analysis Services Database Using SQL Server Agent Job Read more: Automate Backup of Analysis Services Database Using SQL Server Agent Job - MyTechMantra.com http://www.mytechmantra.com/LearnSQLServer/Automate_Backup_of_Analysis_Services_Database.html#ixzz1RBEEQ6ps

Backup Analysis Services Database Using SQL Server Agent Job

1. Start SQL Server Management Studio and connect to Database Engine.
2. Expand SQL Server Agent, right click Jobs and choose New Job… from the popup menu as shown in the snippet below.
Create a new SQL Server Agent Job 3. In the New Job dialog box, provide a name for the job and then click on Steps page to create a new step.
New SQL Server Job Step 4. In New Job Step, specify an appropriate step name and choose SQL Server Analysis Services Command as the type from the drop down list. Next you need to mention the Analysis Server Name and copy paste the below mentioned XMLA script as shown in the snippet below.
XMLA Script to backup an Analysis Services Database

XMLA Script to Backup the Analysis Services Database

<--Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <
--Object>
    <--
DatabaseID>Adventure Works DW 2008 SEDatabaseID>
  <--/
Object>
  <--
File>D:\Program Files\Microsoft SQL Server\MSAS10.SQL2008\OLAP\Backup\Adventure Works DW 2008 SE.abfFile>
  <
--AllowOverwrite>trueAllowOverwrite>
<--/
Backup
>

教你找回白色的 Google 导航条

google_white_bar
讨厌硬又黑?怀念上图的白色导航条?你并不是一个人在战斗!万能的 UserScript 可以帮助我们,如果你用 Chrome 的话,直接安装这个用户脚本就可以了。如果你还在用 Firefox 的话则需要先安装 Greasemonkey 或者 Scriptish 才可以载入脚本。
装完后无需重启浏览器,刷新 Google 页面就可以看到效果了。