Краткая информация
Этот инструмент применяет SQL-запрос (query) к базе данных и представляет результаты в виде слоя (layer) или в виде таблицы (table view). Можно использовать запрос для соединения таблиц или вывода поднабора столбцов и строк из исходных данных в базе данных.
Этот инструмент допускает данные из базы геоданных ArcSDE, файловой базы геоданных, персональной базы геоданных или подключения OLE DB.
Использование
Слой, созданный данным инструментом, является временным и будет удален по окончании сеанса редактирования, если вы не сохраните документ карты.
Все входные классы объектов или таблицы должны быть из одной входной рабочей области (workspace).
Если в перечень полей добавляется столбец Shape, результатом будет слой; в противном случае, результатом будет представление таблицы.
Если результатом является слой, он может быть сохранен в файл слоя с помощью инструмента Сохранить в файл слоя (Save To Layer File) или в класс пространственных объектов с помощью инструмента Копировать объекты (Copy Features).
Последовательность полей в списке полей указывает на последовательность, в которой поля появятся в выходном слое или представлении таблицы.
Инструмент позволяет обеспечить опции и список ключевого поля. Эта информация определяет, как определяются строки, и используется для добавления динамически генерируемый столбец ObjectID в данные. Без столбца ObjectID, выборки не будут поддерживаться.
Из перечня ключевых полей можно выбирать различные столбцы, если комбинация этих столбцов необходима для определения уникальных значений.
Если используется SQL-выражение, но не выдает соответствующих записей, выходной класс объектов будет пустым.
Классы пространственных объектов будут соединены, но список полей должен содержать не более одного поля типа геометрии. Если вы добавляете несколько столбцов геометрии, инструмент покажет сообщение об ошибке при нажатии OK и выполнение приостановится.
Более подробно о синтаксисе параметра Выражение (Expression) см. раздел Построение выражения SQL или Основы SQL.
В параметрах Поля (Fields) и Ключевые поля (Key Fields) кнопка Добавить поле (Add Field) используется только в ModelBuilder. В ModelBuilder, если предыдущий инструмент не был запущен или его производные данные не существуют, параметры Поля (Fields) и Ключевые поля (Key Fields) могут не быть заполнены именами полей. Кнопка Добавить поле (Add Field) позволяет добавлять нужные поля, так что вы можете завершить диалог Создать таблицу запроса (Make Query Table) и продолжить построение модели.
Если входные таблицы из файловой базы геоданных, соединение таблиц в целом происходит в последовательности, перечисленной в параметре Входные таблицы. Например, если Таблица1 находится в списке до Таблицы2, Таблица2 будет присоединена путем получения строки из Таблицы1, затем получения соответствующих строк из Таблицы2. Однако, если это приведет к построению запроса Таблицы2 на непроиндексированном поле, а возвращение порядка приведет к построению запроса Таблицы1 на проиндексированном поле, порядок будет изменен с целью повышения производительности. Это единственная логика оптимизации запроса при использовании данных файловой базы геоданных с этим инструментом. В общем, соединения в файловой базе геоданных наиболее эффективны, когда они один-к-многим и один-к-одному.
Синтаксис
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.
| String |
in_key_field [in_key_field,...] (дополнительно) | Задает поле или комбинацию полей, которые могут быть использованы для идентификации строки в запросе. Этот параметр используется только при выбранной опции USE_KEY_FIELDS. Кнопка Добавить поле, которая используется только в ModelBuilder, позволяет добавлять нужные поля, так что вы можете завершить диалог и продолжить построение модели. | Field |
in_field [[Field, {Alias}],...,...] (дополнительно) | Поля, которые будут включены в результирующий слой или представление таблицы. Если для поля установлен псевдоним, то именно он будет отображаться. Если не заданы поля, будут включены все поля из входной таблицы. | Value Table |
where_clause (дополнительно) |
SQL-выражение, использованное для выбора поднабора записей. Подробнее о синтаксисе SQL см. в разделе Справка SQL по выражениям запросов, используемым в ArcGIS. | SQL Expression |
Пример кода
Создать таблицу запроса. Пример (окно Python)
Пример скрипта Python для выполнения функции Создать таблицу запроса (Make Query Table) с запуском из окна Python в ArcGIS.
import arcpy
arcpy.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.
# 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 as err:
print(err.args[0])