REST Web サービスのページネーションを介した ServiceNow からの一括データエクスポートIssue ServiceNow では、数百万のレコードを持つ大規模なデータセットの場合、パフォーマンスへの影響やシステムで実行されている他のサービスへの影響を避けるために、データをチャンク単位でエクスポートすることを推奨しています。以下では、REST Web サービスのページネーションを介して ServiceNow からバルクデータをエクスポートする手順を説明します。 手順 REST コールで返される ServiceNow のレコード数の上限は、デフォルトで 10,000 レコードです。これは、デフォルト値が 10000 であるパラメーター sysparm_limit が省略されているためです。URL にそれより高い値を指定すると、必要な数のレコードを取得できます。 例:/api/now/table/incident?sysparm_limit=40000 大量のレコードを取得するためのベストプラクティスは、ページネーションを使用することです。例えば、最初の REST コールで 1 から 10000 までのレコードを取得し、次に 10001 から 20000、次に 20001 から 30000 まで取得するなど、複数のコールでレコードを複数のサブセットに分けて取得します。 注:返される最大レコード数 (デフォルトでは 10000) を増やすと、パフォーマンスに影響を及ぼす場合があります。 これを行うには、パラメーターを使用します。 sysparm_limit:1 回のコールで取得するレコードの数を定義 (デフォルトでは 10000) sysparm_offset:クエリから除外するレコードを定義 sysparm_query=ORDERBYsys_created_on:作成日時に基づいてレコードのリストをソート この場合、最初のコールは次のようになります。 /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 以降、同様にします。 すべてのレコードが読み取られるまでこのページネーションをループさせることで、すべてのレコードを取得できます。ResolutionREST API トランザクションのデフォルトのクォータルールはトランザクションあたり 60 秒に設定されており、sysparm_limit を大きくし過ぎるとトランザクションがタイムアウトしてキャンセルされる可能性があるため、sysparm_limit の値を控え目にするのがベストプラクティスです。デフォルトのクォータルールRelated Linksスクリプトの例 Linux/Unix プログラムの 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 インスタンスからの添付ファイルのエクスポート 添付ファイルをエクスポートするには、添付ファイルごとにバイナリデータをダウンロードする必要があるため、手順は異なります。次のドキュメントを参照してください。 Bulk Export of all Attachments from a ServiceNow Instance (ServiceNow インスタンスからすべての添付ファイルを一括エクスポートする) https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0790002