arcpy.Select_analysis choosing only a fraction of the record The 2019 Stack Overflow Developer Survey Results Are InSelecting ArcSDE polygon by point in ArcGIS Desktop using ArcPy?Splitting job on ArcPy SearchCursor?What's the best way to get the OBJECTID name?Assigning a vector to a field in feature class (UpdateCursor)Randomly assign a value to a specificed number of rows in a feature class in ArcGISIs there a faster way in python of finding the smallest number in a field?Fastest way to write large numpy arrays to feature class: as rows, or as columns?Extracting attributes of points within overlapping polygons in ArcPy?Identify duplicate attributes and keep value of earliest recordCreating separate shapefiles for each attribute record using loop in ArcPy?

Does HR tell a hiring manager about salary negotiations?

Worn-tile Scrabble

Old scifi movie from the 50s or 60s with men in solid red uniforms who interrogate a spy from the past

Why don't hard Brexiteers insist on a hard border to prevent illegal immigration after Brexit?

Can I have a signal generator on while it's not connected?

Why are there uneven bright areas in this photo of black hole?

How to translate "being like"?

Correct punctuation for showing a character's confusion

What does Linus Torvalds mean when he says that Git "never ever" tracks a file?

Can there be female White Walkers?

I am an eight letter word. What am I?

Is an up-to-date browser secure on an out-of-date OS?

Can a flute soloist sit?

Why couldn't they take pictures of a closer black hole?

Deal with toxic manager when you can't quit

Identify boardgame from Big movie

What information about me do stores get via my credit card?

For what reasons would an animal species NOT cross a *horizontal* land bridge?

Can you cast a spell on someone in the Ethereal Plane, if you are on the Material Plane and have the True Seeing spell active?

Is it okay to consider publishing in my first year of PhD?

How to obtain a position of last non-zero element

What is this business jet?

Dropping list elements from nested list after evaluation

writing variables above the numbers in tikz picture



arcpy.Select_analysis choosing only a fraction of the record



The 2019 Stack Overflow Developer Survey Results Are InSelecting ArcSDE polygon by point in ArcGIS Desktop using ArcPy?Splitting job on ArcPy SearchCursor?What's the best way to get the OBJECTID name?Assigning a vector to a field in feature class (UpdateCursor)Randomly assign a value to a specificed number of rows in a feature class in ArcGISIs there a faster way in python of finding the smallest number in a field?Fastest way to write large numpy arrays to feature class: as rows, or as columns?Extracting attributes of points within overlapping polygons in ArcPy?Identify duplicate attributes and keep value of earliest recordCreating separate shapefiles for each attribute record using loop in ArcPy?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I'm trying to divide up a feature class into a number of smaller sets. I have been using Select_analysis with objectid to divide up the featureclass so far but know that this is not the best method.



So for example, currently I have something like:



query = "objectid > 0 + AND objectid <= 1000"

arcpy.Select_analysis(r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours",r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours_Mereged",query_statement)


What I want to know is if I can use the number of rows in the feature class to generate the query rather than relying on the objectid? So say I get the number of rows of the feature class using arcpy.GetCount_management(featureclass) and it outputs 1.9 million, is there a way I can divide that 1.9 million into 10 parts based on the count rather than objectid?










share|improve this question




























    1















    I'm trying to divide up a feature class into a number of smaller sets. I have been using Select_analysis with objectid to divide up the featureclass so far but know that this is not the best method.



    So for example, currently I have something like:



    query = "objectid > 0 + AND objectid <= 1000"

    arcpy.Select_analysis(r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours",r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours_Mereged",query_statement)


    What I want to know is if I can use the number of rows in the feature class to generate the query rather than relying on the objectid? So say I get the number of rows of the feature class using arcpy.GetCount_management(featureclass) and it outputs 1.9 million, is there a way I can divide that 1.9 million into 10 parts based on the count rather than objectid?










    share|improve this question
























      1












      1








      1








      I'm trying to divide up a feature class into a number of smaller sets. I have been using Select_analysis with objectid to divide up the featureclass so far but know that this is not the best method.



      So for example, currently I have something like:



      query = "objectid > 0 + AND objectid <= 1000"

      arcpy.Select_analysis(r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours",r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours_Mereged",query_statement)


      What I want to know is if I can use the number of rows in the feature class to generate the query rather than relying on the objectid? So say I get the number of rows of the feature class using arcpy.GetCount_management(featureclass) and it outputs 1.9 million, is there a way I can divide that 1.9 million into 10 parts based on the count rather than objectid?










      share|improve this question














      I'm trying to divide up a feature class into a number of smaller sets. I have been using Select_analysis with objectid to divide up the featureclass so far but know that this is not the best method.



      So for example, currently I have something like:



      query = "objectid > 0 + AND objectid <= 1000"

      arcpy.Select_analysis(r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours",r"C:UsersCHOKDesktopmulithreadingmultiprocessing.gdbContours_Mereged",query_statement)


      What I want to know is if I can use the number of rows in the feature class to generate the query rather than relying on the objectid? So say I get the number of rows of the feature class using arcpy.GetCount_management(featureclass) and it outputs 1.9 million, is there a way I can divide that 1.9 million into 10 parts based on the count rather than objectid?







      arcpy objectid






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Apr 8 at 3:29









      AndyAndy

      191




      191




















          2 Answers
          2






          active

          oldest

          votes


















          1














          I'm not aware of any way to do what you're asking directly. But a work around might be...



          Can you add a new field to the feature class? If so, add an integer field, and use the field calculator to add sequential numbers to this field for each feature. One way to do this is explained here: https://support.esri.com/en/technical-article/000011137



          You should modify this code to reset to 1 each time it reaches the number of datasets required. Eg,



          sets=10
          rec=0
          def autoIncrement():
          global rec
          global sets
          pStart = 1
          pInterval = 1
          if (rec == 0 or rec > sets):
          rec = pStart
          else:
          rec += pInterval
          return rec


          Then you can use Split By Attributes to split into multiple feature classes based on the value of this field (which would be 1-10 for 10 sets). See: http://desktop.arcgis.com/en/arcmap/latest/tools/analysis-toolbox/split-by-attributes.htm



          Of course, if it is a dynamic set of data, you would have to recalculate the field each time you wanted to do the same operation again.



          Note that the code for the field calculator above would not have the consecutive records kept together (ie, not the first 10% of records, but 1 record in every 10). If you need the consecutive records kept together, this could be done with a tweak to the above code.






          share|improve this answer




















          • 1





            Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

            – smiller
            Apr 8 at 4:29












          • I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

            – Son of a Beach
            Apr 8 at 4:45


















          1














          Creating and populating new field could significantly slow things down.



          This is why I tested 2 alternatives below on 150k long point dataset. They use similar approach - splitting the list of OBJECTIDs into equal size chunks:



          import arcpy, time
          from arcpy import env
          env.overwriteOutput = True

          infc="many_points"
          OIDs=[row[0] for row in arcpy.da.TableToNumPyArray(infc,"objectid")]
          n=len(OIDs)/10
          t0 = time.time()
          N=65
          for i in xrange(0, len(OIDs), n):
          chunk=OIDs[i:i + n]
          q='OBJECTID >=%i AND OBJECTID <=%i' %(chunk[0],chunk[-1])
          arcpy.Select_analysis(infc, "C:/scratch/scratch.gdb/%s"%chr(N), q)
          N+=1
          arcpy.AddMessage("Seconds %i using query" %int(time.time()-t0))

          t0 = time.time()
          mxd = arcpy.mapping.MapDocument("CURRENT")
          lyr = arcpy.mapping.ListLayers(mxd,infc)[0]
          N=65
          for i in xrange(0, len(OIDs), n):
          chunk=OIDs[i:i + n]
          lyr.setSelectionSet ("NEW",chunk)
          arcpy.CopyFeatures_management(lyr, "C:/scratch/scratch.gdb/%s"%chr(N))
          N+=1
          arcpy.AddMessage("Seconds %i using layer selection" %int(time.time()-t0))


          OUTPUT:



          Seconds 57 using query
          Seconds 34 using using layer selection


          It seems using setSelectionSet method on a layer coupled with Copy features works much faster than Select with query.



          Note: Populating integer field in this sample set took 21 second.






          share|improve this answer























            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "79"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318065%2farcpy-select-analysis-choosing-only-a-fraction-of-the-record%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            I'm not aware of any way to do what you're asking directly. But a work around might be...



            Can you add a new field to the feature class? If so, add an integer field, and use the field calculator to add sequential numbers to this field for each feature. One way to do this is explained here: https://support.esri.com/en/technical-article/000011137



            You should modify this code to reset to 1 each time it reaches the number of datasets required. Eg,



            sets=10
            rec=0
            def autoIncrement():
            global rec
            global sets
            pStart = 1
            pInterval = 1
            if (rec == 0 or rec > sets):
            rec = pStart
            else:
            rec += pInterval
            return rec


            Then you can use Split By Attributes to split into multiple feature classes based on the value of this field (which would be 1-10 for 10 sets). See: http://desktop.arcgis.com/en/arcmap/latest/tools/analysis-toolbox/split-by-attributes.htm



            Of course, if it is a dynamic set of data, you would have to recalculate the field each time you wanted to do the same operation again.



            Note that the code for the field calculator above would not have the consecutive records kept together (ie, not the first 10% of records, but 1 record in every 10). If you need the consecutive records kept together, this could be done with a tweak to the above code.






            share|improve this answer




















            • 1





              Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

              – smiller
              Apr 8 at 4:29












            • I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

              – Son of a Beach
              Apr 8 at 4:45















            1














            I'm not aware of any way to do what you're asking directly. But a work around might be...



            Can you add a new field to the feature class? If so, add an integer field, and use the field calculator to add sequential numbers to this field for each feature. One way to do this is explained here: https://support.esri.com/en/technical-article/000011137



            You should modify this code to reset to 1 each time it reaches the number of datasets required. Eg,



            sets=10
            rec=0
            def autoIncrement():
            global rec
            global sets
            pStart = 1
            pInterval = 1
            if (rec == 0 or rec > sets):
            rec = pStart
            else:
            rec += pInterval
            return rec


            Then you can use Split By Attributes to split into multiple feature classes based on the value of this field (which would be 1-10 for 10 sets). See: http://desktop.arcgis.com/en/arcmap/latest/tools/analysis-toolbox/split-by-attributes.htm



            Of course, if it is a dynamic set of data, you would have to recalculate the field each time you wanted to do the same operation again.



            Note that the code for the field calculator above would not have the consecutive records kept together (ie, not the first 10% of records, but 1 record in every 10). If you need the consecutive records kept together, this could be done with a tweak to the above code.






            share|improve this answer




















            • 1





              Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

              – smiller
              Apr 8 at 4:29












            • I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

              – Son of a Beach
              Apr 8 at 4:45













            1












            1








            1







            I'm not aware of any way to do what you're asking directly. But a work around might be...



            Can you add a new field to the feature class? If so, add an integer field, and use the field calculator to add sequential numbers to this field for each feature. One way to do this is explained here: https://support.esri.com/en/technical-article/000011137



            You should modify this code to reset to 1 each time it reaches the number of datasets required. Eg,



            sets=10
            rec=0
            def autoIncrement():
            global rec
            global sets
            pStart = 1
            pInterval = 1
            if (rec == 0 or rec > sets):
            rec = pStart
            else:
            rec += pInterval
            return rec


            Then you can use Split By Attributes to split into multiple feature classes based on the value of this field (which would be 1-10 for 10 sets). See: http://desktop.arcgis.com/en/arcmap/latest/tools/analysis-toolbox/split-by-attributes.htm



            Of course, if it is a dynamic set of data, you would have to recalculate the field each time you wanted to do the same operation again.



            Note that the code for the field calculator above would not have the consecutive records kept together (ie, not the first 10% of records, but 1 record in every 10). If you need the consecutive records kept together, this could be done with a tweak to the above code.






            share|improve this answer















            I'm not aware of any way to do what you're asking directly. But a work around might be...



            Can you add a new field to the feature class? If so, add an integer field, and use the field calculator to add sequential numbers to this field for each feature. One way to do this is explained here: https://support.esri.com/en/technical-article/000011137



            You should modify this code to reset to 1 each time it reaches the number of datasets required. Eg,



            sets=10
            rec=0
            def autoIncrement():
            global rec
            global sets
            pStart = 1
            pInterval = 1
            if (rec == 0 or rec > sets):
            rec = pStart
            else:
            rec += pInterval
            return rec


            Then you can use Split By Attributes to split into multiple feature classes based on the value of this field (which would be 1-10 for 10 sets). See: http://desktop.arcgis.com/en/arcmap/latest/tools/analysis-toolbox/split-by-attributes.htm



            Of course, if it is a dynamic set of data, you would have to recalculate the field each time you wanted to do the same operation again.



            Note that the code for the field calculator above would not have the consecutive records kept together (ie, not the first 10% of records, but 1 record in every 10). If you need the consecutive records kept together, this could be done with a tweak to the above code.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Apr 8 at 4:52

























            answered Apr 8 at 4:17









            Son of a BeachSon of a Beach

            1,581719




            1,581719







            • 1





              Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

              – smiller
              Apr 8 at 4:29












            • I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

              – Son of a Beach
              Apr 8 at 4:45












            • 1





              Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

              – smiller
              Apr 8 at 4:29












            • I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

              – Son of a Beach
              Apr 8 at 4:45







            1




            1





            Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

            – smiller
            Apr 8 at 4:29






            Building off this, in arcpy you could set up code to generate a new field (doesn't need to be LONG) and populate using da.updateCursor a unique value every x rows, where x is calculated based on initial count. Then split the dataset using Split Layer By Attributes. The advantage here is that you don't need to iterate through selections and can use the split tool to break up the feature class; the disadvantage to both this and Son of a Beach's is the time to update the field.

            – smiller
            Apr 8 at 4:29














            I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

            – Son of a Beach
            Apr 8 at 4:45





            I have updated the answer to use Split By Attributes, as recommended by @smiller. Good idea, that.

            – Son of a Beach
            Apr 8 at 4:45













            1














            Creating and populating new field could significantly slow things down.



            This is why I tested 2 alternatives below on 150k long point dataset. They use similar approach - splitting the list of OBJECTIDs into equal size chunks:



            import arcpy, time
            from arcpy import env
            env.overwriteOutput = True

            infc="many_points"
            OIDs=[row[0] for row in arcpy.da.TableToNumPyArray(infc,"objectid")]
            n=len(OIDs)/10
            t0 = time.time()
            N=65
            for i in xrange(0, len(OIDs), n):
            chunk=OIDs[i:i + n]
            q='OBJECTID >=%i AND OBJECTID <=%i' %(chunk[0],chunk[-1])
            arcpy.Select_analysis(infc, "C:/scratch/scratch.gdb/%s"%chr(N), q)
            N+=1
            arcpy.AddMessage("Seconds %i using query" %int(time.time()-t0))

            t0 = time.time()
            mxd = arcpy.mapping.MapDocument("CURRENT")
            lyr = arcpy.mapping.ListLayers(mxd,infc)[0]
            N=65
            for i in xrange(0, len(OIDs), n):
            chunk=OIDs[i:i + n]
            lyr.setSelectionSet ("NEW",chunk)
            arcpy.CopyFeatures_management(lyr, "C:/scratch/scratch.gdb/%s"%chr(N))
            N+=1
            arcpy.AddMessage("Seconds %i using layer selection" %int(time.time()-t0))


            OUTPUT:



            Seconds 57 using query
            Seconds 34 using using layer selection


            It seems using setSelectionSet method on a layer coupled with Copy features works much faster than Select with query.



            Note: Populating integer field in this sample set took 21 second.






            share|improve this answer



























              1














              Creating and populating new field could significantly slow things down.



              This is why I tested 2 alternatives below on 150k long point dataset. They use similar approach - splitting the list of OBJECTIDs into equal size chunks:



              import arcpy, time
              from arcpy import env
              env.overwriteOutput = True

              infc="many_points"
              OIDs=[row[0] for row in arcpy.da.TableToNumPyArray(infc,"objectid")]
              n=len(OIDs)/10
              t0 = time.time()
              N=65
              for i in xrange(0, len(OIDs), n):
              chunk=OIDs[i:i + n]
              q='OBJECTID >=%i AND OBJECTID <=%i' %(chunk[0],chunk[-1])
              arcpy.Select_analysis(infc, "C:/scratch/scratch.gdb/%s"%chr(N), q)
              N+=1
              arcpy.AddMessage("Seconds %i using query" %int(time.time()-t0))

              t0 = time.time()
              mxd = arcpy.mapping.MapDocument("CURRENT")
              lyr = arcpy.mapping.ListLayers(mxd,infc)[0]
              N=65
              for i in xrange(0, len(OIDs), n):
              chunk=OIDs[i:i + n]
              lyr.setSelectionSet ("NEW",chunk)
              arcpy.CopyFeatures_management(lyr, "C:/scratch/scratch.gdb/%s"%chr(N))
              N+=1
              arcpy.AddMessage("Seconds %i using layer selection" %int(time.time()-t0))


              OUTPUT:



              Seconds 57 using query
              Seconds 34 using using layer selection


              It seems using setSelectionSet method on a layer coupled with Copy features works much faster than Select with query.



              Note: Populating integer field in this sample set took 21 second.






              share|improve this answer

























                1












                1








                1







                Creating and populating new field could significantly slow things down.



                This is why I tested 2 alternatives below on 150k long point dataset. They use similar approach - splitting the list of OBJECTIDs into equal size chunks:



                import arcpy, time
                from arcpy import env
                env.overwriteOutput = True

                infc="many_points"
                OIDs=[row[0] for row in arcpy.da.TableToNumPyArray(infc,"objectid")]
                n=len(OIDs)/10
                t0 = time.time()
                N=65
                for i in xrange(0, len(OIDs), n):
                chunk=OIDs[i:i + n]
                q='OBJECTID >=%i AND OBJECTID <=%i' %(chunk[0],chunk[-1])
                arcpy.Select_analysis(infc, "C:/scratch/scratch.gdb/%s"%chr(N), q)
                N+=1
                arcpy.AddMessage("Seconds %i using query" %int(time.time()-t0))

                t0 = time.time()
                mxd = arcpy.mapping.MapDocument("CURRENT")
                lyr = arcpy.mapping.ListLayers(mxd,infc)[0]
                N=65
                for i in xrange(0, len(OIDs), n):
                chunk=OIDs[i:i + n]
                lyr.setSelectionSet ("NEW",chunk)
                arcpy.CopyFeatures_management(lyr, "C:/scratch/scratch.gdb/%s"%chr(N))
                N+=1
                arcpy.AddMessage("Seconds %i using layer selection" %int(time.time()-t0))


                OUTPUT:



                Seconds 57 using query
                Seconds 34 using using layer selection


                It seems using setSelectionSet method on a layer coupled with Copy features works much faster than Select with query.



                Note: Populating integer field in this sample set took 21 second.






                share|improve this answer













                Creating and populating new field could significantly slow things down.



                This is why I tested 2 alternatives below on 150k long point dataset. They use similar approach - splitting the list of OBJECTIDs into equal size chunks:



                import arcpy, time
                from arcpy import env
                env.overwriteOutput = True

                infc="many_points"
                OIDs=[row[0] for row in arcpy.da.TableToNumPyArray(infc,"objectid")]
                n=len(OIDs)/10
                t0 = time.time()
                N=65
                for i in xrange(0, len(OIDs), n):
                chunk=OIDs[i:i + n]
                q='OBJECTID >=%i AND OBJECTID <=%i' %(chunk[0],chunk[-1])
                arcpy.Select_analysis(infc, "C:/scratch/scratch.gdb/%s"%chr(N), q)
                N+=1
                arcpy.AddMessage("Seconds %i using query" %int(time.time()-t0))

                t0 = time.time()
                mxd = arcpy.mapping.MapDocument("CURRENT")
                lyr = arcpy.mapping.ListLayers(mxd,infc)[0]
                N=65
                for i in xrange(0, len(OIDs), n):
                chunk=OIDs[i:i + n]
                lyr.setSelectionSet ("NEW",chunk)
                arcpy.CopyFeatures_management(lyr, "C:/scratch/scratch.gdb/%s"%chr(N))
                N+=1
                arcpy.AddMessage("Seconds %i using layer selection" %int(time.time()-t0))


                OUTPUT:



                Seconds 57 using query
                Seconds 34 using using layer selection


                It seems using setSelectionSet method on a layer coupled with Copy features works much faster than Select with query.



                Note: Populating integer field in this sample set took 21 second.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Apr 8 at 9:09









                FelixIPFelixIP

                16.7k11642




                16.7k11642



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318065%2farcpy-select-analysis-choosing-only-a-fraction-of-the-record%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

                    Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition

                    Marilyn Monroe Ny fiainany manokana | Jereo koa | Meny fitetezanafanitarana azy.