ジオプロセシング ツール、Python スクリプト、または ArcGIS for Desktop のジオデータベース管理ツールを使用して、これまで ArcSDE の管理コマンドを使用して実行していたジオデータベース管理およびデータ管理を実行します。
次のセクションでは、エンタープライズ ジオデータベースの一般的なジオデータベース管理タスクおよびデータ管理タスクを実行する方法について説明します。
ジオデータベース管理
管理タスクによって、ジオデータベース管理者として接続する必要がある場合や、データベース管理者として接続しなければならない場合があります。ほとんどの場合、管理タスクをスクリプトで処理する場合は、必要なユーザーとして接続するためのデータベース接続ファイル (*.sde) を作成する必要があります。このファイルを作成するには、[データベース接続の作成 (Create Database Connection)] ジオプロセシング ツールを使用するか、ArcGIS for Desktop の [データベース コネクション] ダイアログ ボックスを使用します。
ジオデータベースの作成 | ツール |
---|---|
Microsoft SQL Server、Oracle、または PostgreSQL でのジオデータベースの作成 | [エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ジオプロセシング ツールまたは [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ジオプロセシング ツール |
IBM DB2 または IBM Informix でのジオデータベースの作成 | [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ジオプロセシング ツール |
ジオデータベース設定の制御 | ツール |
---|---|
DBTUNE のコンフィグレーション キーワードの追加およびパラメーターの編集 | [ジオデータベース コンフィグレーション キーワードのエクスポート (Export Geodatabase Configuration Keywords)] および [ジオデータベース コンフィグレーション キーワードのインポート (Import Geodatabase Configuration Keywords)] ジオプロセシング ツール |
ログ ファイル テーブルの構成の変更 | [ジオデータベース ログ ファイル テーブルの構成 (Configure Geodatabase Log File Tables)] ジオプロセシング ツール |
Oracle からのスキーマ ジオデータベースの削除 | [スキーマ ジオデータベースの削除 (Delete Schema Geodatabase) ツール] ジオプロセシング ツール |
ジオデータベースのアップグレード | [ジオデータベースのアップグレード (Upgrade Geodatabase)] ジオプロセシング ツール |
バージョン対応ジオデータベースの管理 | ツール |
---|---|
ジオデータベースのバージョンの作成 | [バージョンの作成 (Create Version)] ジオプロセシング ツール、または ArcGIS for Desktop の [バージョン マネージャー] ダイアログ ボックス |
バージョンのリコンサイル | [バージョンのリコンサイル (Reconcile Versions)] ジオプロセシング ツール、または ArcMap の [リコンサイル] 機能 |
親バージョンへの変更のポスト | [バージョンのポスト (Post Version)] ジオプロセシング ツール、または ArcMap の [ポスト] 機能の使用 |
バージョン対応ジオデータベースの圧縮 | [圧縮 (Compress)] ジオプロセシング ツール、または ArcGIS for Desktop の [データベース圧縮] 機能 |
ジオデータベースのバージョンの削除 | [バージョンの削除 (Delete Version)] ジオプロセシング ツール、または ArcGIS for Desktop の [バージョン マネージャー] ダイアログ ボックス |
バージョン メタデータおよびシステム テーブルの診断と修復 | [バージョン メタデータの診断 (Diagnose Version Metadata)]、[バージョン メタデータの修復 (Repair Version Metadata)]、[バージョン テーブルの診断 (Diagnose Version Tables)]、および [バージョン テーブルの修復 (Repair Version Tables)] ジオプロセシング ツール |
バージョン システム テーブルのインデックスの更新 | [インデックスの再構築 (Rebuild Indexes)] ジオプロセシング ツール |
バージョン システム テーブルの統計情報の更新 | [データセットの分析 (Analyze Datasets)] ジオプロセシング ツール |
接続の管理 | ツール |
---|---|
現在のジオデータベース接続リストの取得 | ArcGIS for Desktop の [ジオデータベース管理] ダイアログ ボックスの [接続] タブ、または ListUser Python 関数 また、[ジオデータベース管理] ダイアログ ボックスの [ロック] タブで、接続が保持しているロックを確認することもできます。 |
ジオデータベースからの接続の切断 | ArcGIS for Desktop の [ジオデータベース管理] ダイアログ ボックスの [接続] タブ、または DisconnectUser Python 関数 |
ジオデータベース接続の一時的なブロックと接続の再有効化 | ArcGIS for Desktop の [データベース プロパティ] ダイアログ ボックスの [接続] タブ、または AcceptConnections Python 関数 |
データ管理
データをエンタープライズ ジオデータベースに読み込むと、接続しているユーザーはジオデータベースにデータを所有することになります。一部のジオデータベース管理タスク (権限の付与、インデックスの再構築など) は、データの所有者しか実行できません。これらのタスクを実行する前に、データベース接続ファイル (*.sde) を作成して正しいユーザーとして接続していることを確認してください。
ほとんどの場合、ArcSDE の管理コマンドは、データの読み込みと管理をスクリプトで処理するために使用されていました。したがって、次のセクションで説明するデータ管理タスクにはサンプル スクリプトが含まれています。
データベース接続ファイルを各スクリプトの一部として作成する場合は、CreateDatabaseConnection_management を使用します。
移動可能なファイルへのジオデータベース コンテンツのエクスポート
説明: ジオデータベース スキーマ、リレーションシップ、振舞い、およびデータを XML ワークスペース ドキュメントにエクスポートして、他のユーザーと共有できます。ジオデータベースのコンテンツのサブセットを、XML ワークスペース ドキュメントにエクスポートすることもできます。
使用ツール: [XML ワークスペース ドキュメントのエクスポート (Export XML Workspace Document)]
サンプル スクリプト:
""" Export geodatabase contents to a portable file """
import arcpy
import sys
def ExportXMLWorkspaceDocument(in_data, out_file, export_type=None, storage_type=None, export_metadata=None):
""" Export geodatabase contents to a portable file """
try:
arcpy.ExportXMLWorkspaceDocument_management(in_data,
out_file,
export_type,
storage_type,
export_metadata)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ExportXMLWorkspaceDocument(*arguments)
新しいジオデータベース コンテンツのインポート
説明: XML ワークスペース ドキュメントにはジオデータベース スキーマ、リレーションシップ、および振舞いが含まれ、データを含めることも可能です。たとえば、ジオデータベース スキーマだけを含む XML ワークスペース ドキュメントをインポートして、独自のデータをスキーマに読み込むことができます。また、テンプレート ジオデータベースを作成し、そのジオデータベースで定義されているスキーマとリレーションシップを XML ワークスペース ドキュメントにエクスポートして、そのドキュメントを新しいジオデータベースにインポートすることもできます。
使用ツール: [XML ワークスペース ドキュメントのインポート (Import XML Workspace Document)]
サンプル スクリプト:
""" Import new gdb contents """
import arcpy
import sys
def ImportXMLWorkspaceDocument(target_geodatabase, in_file, import_type=None, config_keywords=None):
""" Import new gdb contents """
try:
arcpy.ImportXMLWorkspaceDocument_management(target_geodatabase,
in_file,
import_type,
config_keywords)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportXMLWorkspaceDocument(*arguments)
コンテンツのインポートによる古いコンテンツの上書き
説明: XML ワークスペース ドキュメントにはジオデータベース スキーマ、リレーションシップ、および振舞いが含まれ、データを含めることも可能です。スキーマ、リレーションシップ、振舞い、およびデータを含む XML ワークスペース ドキュメントをインポートして、既存のジオデータベースのコンテンツを上書きできます。別の組織や契約者からプロジェクトの更新を受け取り、最新のデータや定義をすべて使用する場合は、このタスクを実行します。
使用ツール: [削除 (Delete)] および [XML ワークスペース ドキュメントのインポート (Import XML Workspace Document)]
サンプル スクリプト:
""" Imports contents to overwrite old contents """
import arcpy
import sys
from xml.etree import ElementTree
import re
def FindDatasets(xml_file):
""" Open xml file and identify datasets """
xmldoc = ElementTree.ElementTree()
xmldoc.parse(xml_file)
root = xmldoc.getroot()
contents = []
for i in root.findall('WorkspaceDefinition/DatasetDefinitions/DataElement'):
contents.append(i.findtext('Name'))
for j in i.findall('./Children/DataElement/CatalogPath'):
contents.append('/'.join(re.split(r'/[a-z|A-Z]*=', j.text)[1:]))
contents.reverse()
return contents
def DeleteDatasets(database, datasets):
""" Delete dataset in database """
for ds in datasets:
try:
arcpy.Delete_management(os.path.join(database, datasets))
except:
print('Unable to delete {}'.format(ds))
def ImportXML(database, xml_file):
""" Import XML workspace document """
arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)
if __name__ == "__main__":
xml_file = sys.argv[1]
database = sys.argv[2]
datasets = FindDatasets(xml_file)
DeleteDatasets(database, datasets)
ImportXML(database, xml_file)
arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)
単一のシェープファイルまたはカバレッジのインポートとフィールドのマッピング
説明: インポートするシェープファイルまたはカバレッジのフィールドと、ジオデータベースの結果フィーチャクラスのフィールドとのマッピングを指定します。
使用ツール: [ListFields]、[FeatureClassToFeatureClass_conversion]、および [FieldMappings]
サンプル スクリプト:
import arcpy
import os
arcpy.env.overwriteOutput = True
input_features = r'C:\Users\davi4075\Documents\ArcGIS\lakes.shp'
out_fc = r'C:\Users\davi4075\Documents\ArcGIS\mexico.gdb\out_lakes'
fms = arcpy.FieldMappings()
fms.fieldValidationWorkspace = os.path.dirname(out_fc)
# Cycle through input field to transfer
for field in arcpy.ListFields(input_features):
# Exclude geometry and objectid fields
if field.type not in ['Geometry', 'OID']:
fm = arcpy.FieldMap()
fm.addInputField(input_features, field.name)
# if altering field properties, need to push updated field back
# to FieldMap
field.name = field.name.upper()
fm.outputField = field
# Insert FieldMap into FieldMappings
fms.addFieldMap(fm)
arcpy.FeatureClassToFeatureClass_conversion(
input_features, os.path.dirname(out_fc), os.path.basename(out_fc),
field_mapping=fms)
複数のシェープファイルまたはカバレッジの一括インポート
説明: 複数のシェープファイルまたはカバレッジを一度にインポートします。
使用ツール: [フィーチャクラス → ジオデータベース (マルチプル) (Feature Class To Geodatabase (Multiple))]
サンプル スクリプト:
""" Import multiple shapefiles or coverages at one time """
import arcpy
import sys
def ImportMultiple(input_features, output_database):
"""
Import multiple shapefiles or coverages at one time
input_features -- semi-colon delimited string of shapefiles and/or coverages
"""
try:
arcpy.FeatureClassToGeodatabase_conversion(input_features, output_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportMultiple(*arguments)
複数のシェープファイルまたはカバレッジのインポート、および既存のデータベース グループへの新規フィーチャクラスの権限の付与
説明: 複数のシェープファイルまたはカバレッジを一度にインポートし、結果として生成されたフィーチャクラスの権限を既存のデータベース グループに付与して、これらのグループのメンバーが新しいフィーチャクラスにアクセスできるようにします。
使用ツール: [フィーチャクラス → ジオデータベース (マルチプル) (Feature Class To Geodatabase (Multiple))] および [権限の変更 (Change Privileges)]
サンプル スクリプト:
"""
Import multiple shapefiles or coverages and grant privileges on new feature
classes to existing groups or users
"""
import arcpy
import sys
def ImportMultipleAndGrantPrivileges(input_features, output_database, user, view=None, edit=None):
"""
Import multiple shapefiles or coverages and grant privileges on new feature
classes to existing groups or users
"""
try:
feature_classes = input_features.split(';')
for fc in feature_classes:
out_fc = arcpy.CreateUniqueName(fc, output_database)
arcpy.FeatureClassToFeatureClass_conversion(fc, out_fc)
arcpy.ChangePrivileges_management(out_fc, user, view, edit)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportMultipleAndGrantPrivileges(*arguments)
単一のフィーチャクラスへの複数のシェープファイルの結合
説明: 同じ型のデータを含む複数のシェープファイルがある場合は、これらをジオデータベース内で 1 つのフィーチャクラスに結合できます。たとえば、学校を表すポイント シェープファイルを複数の学区から取得する場合、これらのシェープファイルをジオデータベース内の単一の schools フィーチャクラスにインポートできます。
使用ツール: [アペンド (Append)] および [マージ (Merge)]
サンプル スクリプト:
""" Combine multiple shapefiles into one feature class """
import arcpy
import sys
def CombineMultipleFeatureClasses(input_features, output_or_target):
""" Combine multiple shapefiles into one feature class """
try:
feature_classes = input_features.split(';')
if arcpy.Exists(output_or_target):
arcpy.Append_management(feature_classes, output_or_target)
else:
arcpy.Merge_management(feature_classes, output_or_target)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CombineMultipleFeatureClasses(*arguments)
複数のテーブルのインポート
説明: 一度に複数の dBASE、INFO、VPF、OLE DB、またはジオデータベース テーブルを、エンタープライズ ジオデータベースにインポートできます。
使用ツール: [テーブル → ジオデータベース (Table To Geodatabase)]
サンプル スクリプト:
""" Import multiple nonspatial tables """
import arcpy
import sys
def ImportTables(in_tables, target_database):
"""
Export data to a shapefile
in_tables -- semi-colon delimited string of tables
target_database -- the database were tables will be added
"""
try:
tables = in_tables.split(";")
arcpy.TableToGeodatabase_conversion(tables, target_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportTables(*arguments)
テーブルまたはフィーチャクラスの切詰めとレコードの追加
説明: 別の組織や外部組織からデータの更新を受け取った場合は、テーブルの切詰めやデータ更新の追加により、既存のデータおよびテーブルに定義された権限を保持できます。
使用ツール: [テーブルの切詰め (Truncate Table)] および [アペンド (Append)]
サンプル スクリプト:
""" Truncate table or feature class and append records """
import arcpy
import sys
def TruncateTableOrFeatureClass(in_table, target_table):
""" Truncate table or feature class and append records """
try:
arcpy.TruncateTable_management(target_table)
arcpy.Append_management(in_table, target_table, schema_type="NO_TEST")
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
TruncateTableOrFeatureClass(*arguments)
テーブルまたはフィーチャクラスの切詰め、レコードの追加、およびデータベース統計情報の更新
説明: 別の組織や外部組織からデータの更新を受け取った場合は、テーブルの切詰めやデータ更新の追加により、既存のデータおよびテーブルに定義された権限を保持できます。テーブルに多数のレコードが含まれている場合は、新しく更新されたテーブルでデータの統計情報を更新することもできます。
使用ツール: [テーブルの切詰め (Truncate Table)]、[アペンド (Append)]、および [データセットの分析 (Analyze Datasets)]
サンプル スクリプト:
"""
Truncate table or feature class, append records, and update
database statistics
"""
import arcpy
import sys
import os
def TruncateTableOrFeatureClass(in_table, target_table):
"""
Truncate table or feature class, append records, and update
database statistics
"""
try:
arcpy.TruncateTable_management(target_table)
arcpy.Append_management(in_table, target_table)
descr = arcpy.Describe(os.path.dirname(target_table))
if getattr(descr, 'connectionProperties', None):
conn = os.path.dirname(target_table)
else:
conn = os.path.dirname(os.path.dirname(target_table))
arcpy.AnalyzeDatasets_management(conn)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
TruncateTableOrFeatureClass(*arguments)
非空間データベース ビューの作成
説明: データベース ビューでは、複数のテーブルのデータを組み合わせたり、ソース テーブルから返される属性を制限したりできます。
使用ツール: [データベース ビューの作成 (Create Database View)]
サンプル スクリプト:
""" Create nonspatial view """
import arcpy
import sys
def CreateNonspatialView(input_database, view_name, view_definition):
""" Create nonspatial view """
try:
arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CreateNonspatialView(*arguments)
SQL ジオメトリ タイプ列を含むデータベース ビューの作成
説明: データベース ビューでは、複数のテーブルやフィーチャクラスのデータを組み合わせたり、ソース テーブルやフィーチャクラスから返される属性を制限したりできます。ビューには単一の SQL ジオメトリ タイプ列を含めることができ、ArcGIS で空間データを表示できます。
使用ツール: [データベース ビューの作成 (Create Database View)]
サンプル スクリプト:
""" Create view containing SQL geometry type column """
import arcpy
import sys
def CreateSpatialView(input_database, view_name, view_definition):
""" Create view containing SQL geometry type column """
try:
arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CreateSpatialView(*arguments)
テーブルの削除
説明: ジオデータベースから一度に複数のテーブルを削除できます。この操作は、プロジェクト固有のデータなどの一時的なデータを使用するワークフローや、外部組織から置換用データを受け取るようなワークフローで便利です。
使用ツール: [削除 (Delete)]
サンプル スクリプト:
""" Delete nonspatial tables """
import arcpy
import sys
def DeleteNonspatialTables(in_data):
"""
Delete nonspatial tables
in_data -- semi-colon delimited string of tables
"""
try:
tables = in_data.split(';')
for table in tables:
arcpy.Delete_management(table)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
DeleteNonspatialTables(sys.argv[1])
フィーチャクラスの削除
説明: ジオデータベースから一度に複数のフィーチャクラスを削除できます。この操作は、プロジェクト固有のデータなどの一時的なデータを使用するワークフローや、外部組織から置換用データを受け取るようなワークフローで便利です。
使用ツール: [削除 (Delete)]
サンプル スクリプト:
""" Delete feature classes """
import arcpy
import sys
def DeleteFeatureClasses(in_data):
"""
Delete feature classes
in_data -- semi-colon delimited string of feature classes
"""
try:
feature_classes = in_data.split(';')
for fc in feature_classes:
arcpy.Delete_management(fc)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
DeleteFeatureClasses(sys.argv[1])
シェープファイルへのデータのエクスポート
説明: フィーチャクラスをシェープファイルにエクスポートします。
使用ツール: [フィーチャクラス → シェープファイル (マルチプル) (Feature Class To Shapefile (multiple))]
サンプル スクリプト:
""" Export data to a shapefile """
import arcpy
import sys
def ExportToAShapefile(in_table, target_shp):
""" Export data to a shapefile """
try:
if arcpy.Exists(target_shp):
arcpy.Append_management(in_table, target_shp, schema_type="NO_TEST")
else:
arcpy.CopyRows_management(in_table, target_shp)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ExportToAShapefile(*arguments)
バージョン対応ジオデータベースのリコンサイル、ポスト、および圧縮
説明: 複数のユーザーが長期にわたってデータを同時に編集する必要がある編集ワークフローを効率的に行うには、データとジオデータベースをバージョン対応登録します。この場合、ジオデータベースにいくつかの保守が必要になります。これらの保守には、上位バージョンに行った変更を取得するためのバージョン対応登録されたデータと上位バージョンのリコンサイル、子バージョンから上位バージョンへの編集のポスト、不要なバージョン ステートを削除するためのジオデータベースの圧縮があります。
使用ツール: [バージョンのリコンサイル (Reconcile Versions)] および [圧縮 (Compress)]
サンプル スクリプト:
""" Reconcile, post, and compress versioned geodatabase """
import arcpy
import sys
def ReconcilePostAndCompress(input_database, reconcile_mode):
"""
Reconcile, post, and compress versioned geodatabase
"""
try:
arcpy.ReconcileVersions_management(input_database, reconcile_mode)
arcpy.Compress_management(input_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ReconcilePostAndCompress(*arguments)
「Python スクリプトを使用したバージョンのバッチ リコンサイルとポスト」もご参照ください。
テーブルまたはフィーチャクラスのバージョン対応登録、Global ID の追加、およびレプリカの作成
説明: テーブルまたはフィーチャクラスを複製する前に、これらをバージョン対応登録して、Global ID 列を追加する必要があります。
使用ツール: [バージョン対応登録 (Register As Versioned)]、[Global ID の追加 (Add GlobalIDs)]、および [レプリカの作成 (Create Replica)]
サンプル スクリプト:
""" Version tables, add global IDs to tables, and create a replica """
import arcpy
import sys
def VersionTablesEtc(in_tables, in_type=None, out_geodatabase=None, out_name=None):
""" Version tables, add global IDs to tables, and create a replica """
try:
tables = in_tables.split(';')
for table in tables:
arcpy.RegisterAsVersioned_management(table)
arcpy.AddGlobalIDs_management(tables)
if 'CreateReplica' in dir(arcpy.management):
arcpy.CreateReplica_management(tables, in_type, out_geodatabase, out_name)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
VersionTablesEtc(*arguments)
ジオデータベースへのサードパーティ テーブルの登録
説明: サードパーティ製アプリケーションまたは SQL を使用して、ジオデータベースが格納されているデータベースにテーブル (空間および非空間の両方) を作成する場合は、テーブルをジオデータベースに登録できます。テーブルに関する情報がジオデータベース システム テーブルに追加され、テーブルをジオデータベースの機能で利用できるようになります。
使用ツール: [ジオデータベースに登録 (Register With Geodatabase)]
サンプル スクリプト:
""" Register third-party tables with the geodatabase """
import arcpy
import sys
def RegisterThirdPartyTables(in_tables):
"""
Register third-party tables with the geodatabase
in_tables -- semi-colon delimited string of tables
"""
try:
tables = in_tables.split(';')
for table in tables:
arcpy.RegisterWithGeodatabase_management(table)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
RegisterThirdPartyTables(sys.argv[1])