REST Web サービスのページネーションを介した ServiceNow からの一括データエクスポート方法Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } REST API ページネーションを使用して ServiceNow インスタンスから大量データをエクスポートする方法を説明します。数百万件のレコードを含む大規模なデータセットをエクスポートする場合は、パフォーマンスへの影響やインスタンス上で実行されている他のサービスへの影響を避けるため、データをチャンク単位でエクスポートしてください。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポートされているすべてのリリース Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } REST API ページネーションの仕組み デフォルトでは、ServiceNow は REST API 呼び出しごとに最大 10,000 件のレコードを返します。この制限は sysparm_limit パラメータによって制御されており、デフォルト値は 10,000 です。URL でより大きな値を指定すると、より多くのレコードを返すことができますが、この値を大幅に増やすとトランザクションがタイムアウトする可能性があります。 例: /api/now/table/incident?sysparm_limit=40000 注: REST API トランザクションのデフォルトのクォータルールは、トランザクションあたり 60 秒に設定されています。sysparm_limit を大幅に増やすと、トランザクションがタイムアウトしてキャンセルされる可能性があります。 大量のレコードを取得する推奨方法はページネーションです。これは、レコードのサブセットを別々の呼び出しで取得する方法です。たとえば、最初の呼び出しでは 1 から 10,000 までのレコードを取得し、2 回目の呼び出しでは 10,001 から 20,000 までのレコードを取得する、といった具合です。 ページネーションパラメータ ページネーションを制御するには、以下のパラメータを使用します。 sysparm_limit — 1 回の呼び出しで返すレコード数を定義します (デフォルトは 10,000)。sysparm_offset — 開始レコード位置を定義し、それより前のレコードをクエリから除外します。sysparm_query=ORDERBYsys_created_on — 作成日時で結果をソートします。 ページネーションの例 以下の例は、ページネーション化された REST API 呼び出しを構成する方法を示しています。 最初の呼び出し: /api/now/table/incident?sysparm_limit=10000&sysparm_offset=0&sysparm_query=ORDERBYsys_created_on 2 回目の呼び出し: /api/now/table/incident?sysparm_limit=10000&sysparm_offset=10000&sysparm_query=ORDERBYsys_created_on 3 回目の呼び出し: /api/now/table/incident?sysparm_limit=10000&sysparm_offset=20000&sysparm_query=ORDERBYsys_created_on すべてのレコードが取得されるまで、このパターンをループで繰り返します。 大量ダウンロードスクリプトの例 以下の bash スクリプトは、cURL を使用して REST API ページネーションでインスタンスからデータを大量ダウンロードします。この例は一般的なガイドラインとして提供されており、お客様の要件に合わせて調整できます。 #!/bin/bash ## Example of how to use REST API pagination to bulk download data ## Settings PAGESIZE=10000 PAGESTOFETCH=10 TABLE=tablename # e.g incident, question_answer, task INSTANCENAME=myinstancename # e.g if instance is acme.service-now.com then put 'acme' here USERNAME=myuser PASSWORD=mypassword OUTPUTFORMAT=json # either xml or json ## Program echo "Starting at `date`" i=0 pageoffset=0 while [[ $i -le $PAGESTOFETCH ]]; do echo "Starting download of $PAGESIZE records from table $TABLE at offset $pageoffset" curl "https://$INSTANCENAME.service-now.com/api/now/table/$TABLE?sysparm_offset=$pageoffset&sysparm_limit=$PAGESIZE" \ --request GET \ --header "Accept:application/$OUTPUTFORMAT" \ --header "Content-Type:application/json" \ --data "{}" \ --user ${USERNAME}:${PASSWORD} \ --output question_answer$i.xml \ --silent echo "Saved $PAGESIZE records to question_answer$i.xml" ((pageoffset+=$PAGESIZE)) ((i++)) done echo "Finished at `date`" 重要: ServiceNow サポートは、カスタムスクリプトに関する支援は提供しておりません。この例は、たとえば bash シェルの代わりに Python を使用するなど、さまざまな方法で実現できます。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ServiceNow インスタンスから添付ファイルを一括エクスポートする方法 — 添付ファイルのバイナリデータをエクスポートする場合は、この記事で説明されている REST API ページネーション方式とは異なる手順を使用します デフォルトのクォータルール