Создать таблицу запроса (Управление данными)

Уровень лицензии:BasicStandardAdvanced

Резюме

Этот инструмент применяет SQL-запрос (query) к базе данных и представляет результаты в виде слоя (layer) или в виде таблицы (table view). Можно использовать запрос для соединения таблиц или вывода поднабора столбцов и строк из исходных данных в базе данных.

Этот инструмент допускает данные из базы геоданных ArcSDE, файловой базы геоданных, персональной базы геоданных или подключения OLE DB.

Использование

Синтаксис

MakeQueryTable_management (in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
ПараметрОбъяснениеТип данных
in_table
[in_table,...]

Имя таблицы или таблиц, которые будут использоваться в запросе. Если перечислено несколько таблиц, то с помощью выражения можно установить правила их соединения.

Входная таблица может быть из базы геоданных ArcSDE, файловой базы геоданных, персональной базы геоданных или подключения OLE DB.

Table View; Raster Layer
out_table

Имя слоя или представления таблицы, которое будет создано с помощью этого инструмента.

Table View;Raster Layer
in_key_field_option

Определяет, как будут генерироваться значения ObjectID для запроса. По умолчанию используется опция USE_KEY_FIELDS.

  • USE_KEY_FIELDSУказывает на то, что поля, выбранные в списке ключевых полей, должны использоваться для определения динамического поля ObjectID. Если в списке ключевых полей нет выбранных полей, будет автоматически применена опция ADD VIRTUAL_KEY_FIELD.
  • ADD_VIRTUAL_KEY_FIELDЭта опция указывает на то, что не было выбрано ни одного ключевого поля, и будет создано динамическое поле ObjectID. Это делается путем копирования данных в локальную, системно-управляемую рабочую область и добавления поля с уникальными значениями в копию. В дальнейшем, результирующий слой или таблица обращаются к копии данных и используют добавленное поле в качестве ключевого.
  • NO_KEY_FIELDЭта опция указывает на то, что динамическое поле ObjectID не будет создано. Выбор этой опции означает, что для таблицы будет недоступно создание выборки. Обратите внимание, что если уже существует поле типа ObjectID в списке полей, оно будет использоваться как ObjectID, даже если эта опция выбрана.
String
in_key_field
[in_key_field,...]
(дополнительно)

Задает поле или комбинацию полей, которые могут быть использованы для идентификации строки в запросе. Этот параметр используется только при выбранной опции USE_KEY_FIELDS.

Кнопка Добавить поле (Add Field), которая используется только в ModelBuilder, позволяет добавлять нужные поля, так что вы можете завершить диалог и продолжить построение модели.

Field
in_field
[[Field, {Alias}],...,...]
(дополнительно)

Поля, которые будут включены в результирующий слой или представление таблицы. Если для поля установлен псевдоним, то именно он будет отображаться. Если не заданы поля, будут включены все поля из входной таблицы.

Value Table
where_clause
(дополнительно)

SQL-выражение, использованное для выбора поднабора записей. Синтаксис выражения различается в зависимости от формата данных. Например, если вы строите запрос к файловой или ArcSDE базам геоданных, шейп-файлам, покрытиям, dBASE или таблицам INFO, заключите имена полей в двойные кавычки:

"ИМЯ_ПОЛЯ"

Если вы запрашиваете персональную базу геоданных, заключите поля в квадратные скобки:

[ИМЯ_ПОЛЯ]

В Python строковые значения заключаются в соответствующие одинарные или двойные кавычки. Чтобы создать строку с кавычками (что часто требуется при написании условия WHERE в выражениях SQL), можно использовать перед кавычками escape-символ (символ обратной косой черты) или заключить всю строку в три пары кавычек. Например, если требуется написать в условии WHERE

"CITY_NAME" = 'Чикаго',

можно заключить всю строку в двойные кавычки и добавить escape-символ перед внутренними двойными кавычками:

" \"CITY_NAME\" = 'Чикаго' ",

Или можно заключить всю строку в одинарные кавычки и добавить escape-символ перед внутренними одинарными кавычками:

' "CITY_NAME" = \'Чикаго\' '

Или можно заключить всю строку в три пары кавычек и не добавлять escape-символ:

""" "CITY_NAME" = 'Чикаго' """,

Более подробно о синтаксисе SQL и о том, как он различается между источниками данных, смотрите разделы справки: Литература по SQL для выражений запросов, используемых в ArcGIS.

SQL Expression

Пример кода

Создать таблицу запроса. Пример (окно Python)

Пример скрипта Python для выполнения функции Создать таблицу запроса (Make Query Table) с запуском из окна Python в ArcGIS.

import arcpy
from arcpy import env
env.workspace = "C:/data/data.gdb"
arcpy.MakeQueryTable_management (["Counties","codemog"], "queryout","ADD_VIRTUAL_KEY_FIELD", "",
                   [["Counties.OBJECTID", 'ObjectID'],["Counties.NAME", 'Name'],
                    ["codemog.Males", 'Males'], ["codemog.Females", 'Females']],
                   "Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
Создать таблицу запроса. Пример 2 (автономный скрипт)

Следующий скрипт является примером использования инструмента Создать таблицу запроса (Make Query Table) в автономном режиме Python.

# MakeQueryTableOLEDB.py
# Description: Create a query table from two OLE DB tables using a limited set of
#               fields and establishing an equal join.
# Author: ESRI
 
# Import system modules
import arcpy
 
try:
    # Local variables...
    tableList = ["Database Connections/balrog.odc/vtest.COUNTIES",\
                 "Database Connections/balrog.odc/vtest.CODEMOG"]
    
    fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'],["vtest.COUNTIES.NAME", 'Name']\
                 ["vtest.CODEMOG.Males", 'Males'],["vtest.CODEMOG.Females", 'Females']]
    whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\
                  "and vtest.COUNTIES.STATE_NAME = 'California'"
    keyField = "vtest.COUNTIES.OBJECTID"
    lyrName = "CountyCombined"
    # Make Query Table...
    arcpy.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
 
    # Print the total rows
    print arcpy.GetCount_management(lyrName)
 
    # Print the fields
    Fields = arcpy.ListFields(lyrName)
    for field in Fields:
        print Field.name
        
 
    # Save as a dBASE file
    arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")
 
except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message

Параметры среды

Связанные темы

Информация о лицензировании

ArcGIS for Desktop Basic: Да
ArcGIS for Desktop Standard: Да
ArcGIS for Desktop Advanced: Да
9/10/2013