SSISパッケージを作成して、ストアドプロシージャにクエリを実行し、結果セットをテーブルに格納します。この表には180億レコードの結果セットが含まれます。私は一意のキー列を持っていないので、私は動的に作成したrowno列を私は、宛先テーブルに格納されているストアドプロシージャを照会しています。SSIS最大論理チェックは機能しますが、データの移行に時間がかかります
ターゲットテーブルの最大値を取得し、maxを指定してソースをフィルタリングして、各移行でデルタのみを転送するSQL実行タスクを作成しました。私は最大のロジックが動作していることがわかります。デルタだけが移行されますが、転送するデータはありませんが、移行は遅いと感じています。
問題が何かわかりません。データがないのにプロセスの完了には同じ時間がかかりますが、データはありませんが、データがないことがわかります。あなたは、行の順序を信頼することはできません。
はここクエリ
SELECT *
FROM
(SELECT
rowno = row_number() OVER (order by (SELECT NULL)) ,
fp.companyid,
fd.dataitemid,
di.dataitemname,
fd.dataitemvalue,
fu.unittypevalue,
fp.fiscalyear, fp.fiscalquarter,
fi.periodenddate, fi.filingdate,
rt.restatementtypename,
fi.latestforfinancialperiodflag, fi.latestfilingforinstanceflag,
conv.currencyconversionflag,
cur.currencyname,
pt.periodtypename
FROM
ciqfinperiod fp
INNER JOIN
CoreReferenceStaging.dbo.MarketDataTemp1 a ON a.companyId = fp.companyid
INNER JOIN
ciqperiodtype pt ON pt.periodtypeid = fp.periodtypeid
INNER JOIN
ciqfininstance fi ON fi.financialperiodid = fp.financialperiodid
LEFT JOIN
ciqrestatementtype rt ON rt.restatementtypeid = fi.restatementtypeid
INNER JOIN
ciqfininstancetocollection ic ON ic.financialinstanceid = fi.financialinstanceid
INNER JOIN
ciqfincollection fc ON fc.financialcollectionid = ic.financialcollectionid
INNER JOIN
ciqfincollectiondata fd ON fd.financialcollectionid = fc.financialcollectionid
INNER JOIN
ciqdataitemconversionrule conv ON conv.dataitemid = fd.dataitemid
INNER JOIN
ciqcurrency cur ON cur.currencyid = fc.currencyid
INNER JOIN
ciqdataitem di ON di.dataitemid= fd.dataitemid
INNER JOIN
ciqfinunittype fu ON fu.unittypeid = fd.unittypeid) q
WHERE
q.rowno > @maxrowno
実行タスクの全ての
select COUNT_BIG(rowno) as rowno
from [CoreReferenceStaging].[dbo].[FinancialStatementIds]
だから、解決策は何でしょう。 – Tom
はい私は実行計画を見て、最適に最適化しました。あなたが言及したように、最大論理チェックがありますが、それはデータを照会し、フィルタリングする時間がかかります。 – Tom
解決策は、現在のクエリおよび/または構造を少し再設計することである。ロジックがあるかもしれないが、すべてのテーブルをスキャンしないようにするには、最初にデータをフィルタリングするために増分(ID)マーカーまたはデータマーケットを見つける必要があります。申し訳ありませんが、構造(インデックスを含む)と表の統計情報がわからないので、私はあなたに準備ができていません。 –