- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2022 12:10 AM
お世話になっております。
テーブルに格納されているレコードを全件CSVファイルでエクスポートするための手段について質問させてください。
①リスト表示後、「列のオプション」を右クリックし、エクスポート>CSVを選択
②https://<インスタンス名>.service-now.com/<テーブル名>_list.do?CSV
上記2つ以外の方法はありますでしょうか?
上記の方法ですと処理時間がタイムアウトしないようなレコード数のデータのみエクスポート可能な認識です。
タイムアウトするような大量レコードのエクスポートはServiceNowが推奨していないことは認識しておりますが、
テーブルデータバックアップの要件として挙がっており、対策をご存知であればご教示いただければと思います。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2022 05:48 AM
バックアップ目的であれば、CSVファイルよりXMLファイルで保存するべきです。
復元するときXMLファイルインポートなら完全に元のレコードに戻ります。
復元するときに取り込める最大数の制限を受けるので、巨大なファイルを復元できません。
そのため、大量データのExport方法は、1万件程度に分割してDownloadします。
補足、バックアップであればReferenceしているテーブル(ユーザー関連など)もすべてバックアップをしておきましょう。(Reference先のSYSIDを正しく参照できるようにXMLファイルで関連テーブルすべてをバックアップする)
単純に今回だけデータを手動でバックアップしたい要件であれば、下記のようなScriptで分割ダウンロードのURLを作成できます。Script Backgroundで実行してみてください。インスタンス名など各種パラメーターは環境に合わせて変更してください。
var myInstance = 'myInstance'; // インスタンス名
var myTable = 'incident'; // エクスポートテーブル名
var myQuery = ''; // エクスポートQuery 必要な場合に記載
var myFileType = 'CSV'; // エクスポート形式 CSV,XLSX,UNL(UNL=XML形式でダウンロード)
var setLimit = 10000; // エクスポート分割行数
var sysid = '';
var exportUrl = [];
var gr = new GlideRecord(myTable);
gr.initialize();
var fields = gr.getFields();
var myField = [];
var num;
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=' +
(!!myQuery ? encodeURIComponent(myQuery) + '%5EORDERBYsys_id' : 'ORDERBYsys_id') +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
num = setLimit - 1;
do {
gr = new GlideRecord(myTable);
gr.initialize();
if(myQuery) gr.addEncodedQuery(myQuery);
gr.orderBy('sys_id');
gr.chooseWindow(num, num + 2);
gr.query();
if (gr.next()) {
sysid = '' + gr.getValue('sys_id');
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=sys_id%3E' + sysid +
(!!myQuery ? '%5E' + encodeURIComponent(myQuery) : '') +
'%5EORDERBYsys_id' +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
}
num += setLimit;
} while (gr.next());
for (num = 0; num < exportUrl.length; num++) {
gs.info(exportUrl[num]);
}
定期的に自動バックアップをしたいなら、バックアップするサーバー側にPowershellやPythonなどで、定期的に分割ダウンロードするScriptを組むと良いです。もし要望があれば投稿します。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2022 03:52 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2022 04:49 AM
Export set にも 最大行数設定があるので参考に記載しておきます。この設定を1000万とかに設定をしたことはないので検証してみてください。この機能はカスタマイズではないのでNowSupportでも回答を得られるかもしれません。
Export Set ignores the "Maximum Rows' value - Support and Troubleshooting (servicenow.com)
- System Property の CSV Export Limit (glide.csv.export.limit)ファイルの種類別に設定
- Export set の Maximum Rows
- DatabaseView を Export する場合に限り、SystemProperty の glide.db.max_view_records
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2022 02:10 AM
Takeru様、iwai様
ご返信ありがとうございます。
前提条件がお伝えできておらずに申し訳ありません。
セキュリティ要件により、SNOW→MIDサーバの通信は許可しておりません。
今後、別の環境でExport setを使う機会がありましたら参考にさせていただきます。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2022 05:48 AM
バックアップ目的であれば、CSVファイルよりXMLファイルで保存するべきです。
復元するときXMLファイルインポートなら完全に元のレコードに戻ります。
復元するときに取り込める最大数の制限を受けるので、巨大なファイルを復元できません。
そのため、大量データのExport方法は、1万件程度に分割してDownloadします。
補足、バックアップであればReferenceしているテーブル(ユーザー関連など)もすべてバックアップをしておきましょう。(Reference先のSYSIDを正しく参照できるようにXMLファイルで関連テーブルすべてをバックアップする)
単純に今回だけデータを手動でバックアップしたい要件であれば、下記のようなScriptで分割ダウンロードのURLを作成できます。Script Backgroundで実行してみてください。インスタンス名など各種パラメーターは環境に合わせて変更してください。
var myInstance = 'myInstance'; // インスタンス名
var myTable = 'incident'; // エクスポートテーブル名
var myQuery = ''; // エクスポートQuery 必要な場合に記載
var myFileType = 'CSV'; // エクスポート形式 CSV,XLSX,UNL(UNL=XML形式でダウンロード)
var setLimit = 10000; // エクスポート分割行数
var sysid = '';
var exportUrl = [];
var gr = new GlideRecord(myTable);
gr.initialize();
var fields = gr.getFields();
var myField = [];
var num;
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=' +
(!!myQuery ? encodeURIComponent(myQuery) + '%5EORDERBYsys_id' : 'ORDERBYsys_id') +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
num = setLimit - 1;
do {
gr = new GlideRecord(myTable);
gr.initialize();
if(myQuery) gr.addEncodedQuery(myQuery);
gr.orderBy('sys_id');
gr.chooseWindow(num, num + 2);
gr.query();
if (gr.next()) {
sysid = '' + gr.getValue('sys_id');
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=sys_id%3E' + sysid +
(!!myQuery ? '%5E' + encodeURIComponent(myQuery) : '') +
'%5EORDERBYsys_id' +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
}
num += setLimit;
} while (gr.next());
for (num = 0; num < exportUrl.length; num++) {
gs.info(exportUrl[num]);
}
定期的に自動バックアップをしたいなら、バックアップするサーバー側にPowershellやPythonなどで、定期的に分割ダウンロードするScriptを組むと良いです。もし要望があれば投稿します。