6

I have 150+ feature classes in SDE for which I need to create an empty feature class in a file geodatabase. For these feature classes I need to import the attributes and the name of the feature class as in SDE. I tried to export to an XML workspace document but it is not working because of some error on the SDE and I'm not an SDE administrator, so I am unable to modify the things on the SDE.

An alternative to this that I tried was creating a script in Python for creating the feature class. I get the names of the feature class from the SDE but am unable to create them on the local SDE.

Also how can I read the geometry type for the feature class in arcpy?

Here is the code I've written:

import arcpy
arcpy.env.workspace= r"C:\Users088927円\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\ENT-QA @ sample.sde"
fcList = arcpy.ListFeatureClasses('sde."ENT-QA".*',"","")
output = "C:/Users/088927/Desktop/Schema.gdb"
for fc in fcList:
 fullName = arcpy.ParseTableName(fc)
 #fcTemplate = fc.
 finallist = []
 nameList = fullName.split(",")
 databaseName=nameList[0]
 ownerName = nameList[1]
 fcName = nameList [2]
 fcStr = str(fcName)
 print fcStr
 arcpy.CreateFeatureclass_management(r"C:\Users\abc\Desktop\Schema.gdb",fcstr)
PolyGeo
65.5k29 gold badges115 silver badges349 bronze badges
asked Apr 27, 2012 at 21:14
4
  • What error did you get when you attempted to export to an XML workspace document, and what options did you set on the export dialog? Commented Apr 27, 2012 at 21:33
  • How would I accept answers. What should I do I didnt know anything about. Thanks for letting me know @blah238 Commented Apr 27, 2012 at 21:33
  • Hi @blah238 I'm getting an error for unable to create an XML because of some layers got corrupted on the SDE. As you asked me to accept the previous answers I did go checked dthe button for the answer it is not there on my quesitions. Do I need to activate anything before I see that button on my questions. Thanks. Commented Apr 27, 2012 at 21:42
  • The accept button is on other users' answers to your questions. You are accepting their answers as the best solution to your questions. Commented Apr 27, 2012 at 21:44

2 Answers 2

9

Just use the CreateFeatureClass tool, passing the original feature class as the template argument. Grab the shape type from the Describe object of the input feature class.

Unlike the other answer, this won't copy a bunch of unnecessary records only to delete them right away.

import arcpy
arcpy.env.workspace= 'MyGDB.gdb'
fcs = arcpy.ListFeatureClasses()
output = "OutGDB.gdb"
for fc in fcs:
 geom = arcpy.Describe(fc).shapeType
 arcpy.CreateFeatureclass_management(output, fc, geom, fc, spatial_reference=fc)

UPDATE:

If you need to preserve domains/subtypes, then run Select_analysis using a generic where clause that will capture none of the records, like OBJECTID < 0:

import os, arcpy
arcpy.env.workspace= 'MyGDB.gdb'
fcs = arcpy.ListFeatureClasses()
output = "OutGDB.gdb"
wc = 'OBJECTID < 0'
for fc in fcs:
 fc_out = os.path.join(output, fc)
 arcpy.Select_analysis(fc, fc_out, wc)

This is far more efficient than copying all the records and then deleting them. I've yet to find an approach that will preserve editor tracking.

answered Oct 8, 2016 at 20:26
5
  • Unfortunately this method does not also export domains and subtypes only the fieldname schema Commented Mar 2, 2018 at 19:03
  • @TristanForward, if retaining domains, etc. is a requirement, then it would be far more efficient than GetSpatial's answer to run arcpy.Select_analysis with a where clause like OBJECTID < 0 Commented Mar 5, 2018 at 16:00
  • @Tom I've noticed that this technique only copies domains that are currently being used, and not all possible domains. For instance, if I have a subtype/domain defined that does not yet have any features associated with it, the subtype/domain will not be copied. Commented Oct 15, 2018 at 14:37
  • @Barbarossa, that's because domains belong to the database and not to the table/feature class. If it's not being used by the table, then why would you want to copy it anyway? You can use DomainToTable and TableToDomain to copy a domain between databases, but that's for a different question. Commented Oct 15, 2018 at 17:37
  • @Tom I have a standardized schema that is used across an entire organization. Someone who comes behind me may wish to add a subtype/domain that is no longer there. I just want to point out to those in my particular situation that this may not be the best solution for them. Commented Oct 15, 2018 at 18:35
6

Short of being able to figure out why you cannot export an XML schema from SDE, there is a quick and dirty method you might try. This will depend on if you have enough space and privileges.

  1. Create an empty file geodatabase.
  2. Use the copy featureclass tool with the batch option to copy all 150 featureclasses from the SDE geodatabase to your empty file geodatabase.
  3. Set up a python script to cycle through all the featureclasses and run the delete features tool on each of them.

Assuming this works, it should leave you with a file geodatabase that contains all of the empty featureclasses from SDE with all the attribute fields and even the domains and relationship classes if they were defined.

It is definitely clunky, but I've also run across a schema that would not export to an xml workspace due to errors in the schema.

As for your other question, you might check out this help topic on working with geometries It should at least get you on the right track. It may also help to post that as a separate question, or search to see if it has already been asked.

Good luck!

Erica
8,9824 gold badges35 silver badges85 bronze badges
answered May 2, 2012 at 8:41
2
  • 4
    To speed things up, and make it slightly less clunky, select just one feature before making a copy. This way the copy and the delete should go a lot faster if your feature class has a lot of data in it. Commented Sep 11, 2015 at 21:24
  • 1
    If you're going to copy all the records, you could at least use Truncate instead of DeleteFeatures; it's much more efficient. Commented Mar 5, 2018 at 16:08

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.