Сводка
Применяет SQL-запрос к базе данных и представляет результаты в виде слоя или в виде таблицы. Можно использовать запрос для соединения таблиц или вывода поднабора полей или строк из исходных данных в базе данных.
Этот инструмент работает с данными из базы геоданных или из подключения к базе данных через OLE.
Использование
Слой, созданный данным инструментом, является временным и будет удален по окончании сеанса редактирования, если вы не сохраните документ карты.
Все входные классы объектов или таблицы должны быть из одной входной рабочей области.
Если в перечень полей добавляется поле Shape, результатом будет слой; в противном случае результатом будет представление таблицы.
Если результатом является слой, он может быть сохранен в файл слоя с помощью инструмента Сохранить в файл слоя или в класс пространственных объектов с помощью инструмента Копировать объекты.
Последовательность полей в списке полей указывает на последовательность, в которой поля появятся в выходном слое или представлении таблицы.
Инструмент позволяет обеспечить опции и список ключевого поля. Эта информация определяет, как определяются строки, и используется для добавления динамически генерируемого поля ObjectID в данные. Без поля ObjectID, выборки не будут поддерживаться.
Из ключевых полей можно выбрать несколько полей, если комбинация этих полей необходима для определения уникальных значений.
Если используется SQL-выражение, но не выдает соответствующих записей, выходной класс объектов будет пустым.
Классы пространственных объектов будут соединены, но список полей должен содержать не более одного поля типа геометрии.
Для получения подробной информации о синтаксисе параметра Выражение см. раздел Построение выражения запроса или Основы SQL для выражений запроса, применяемых в ArcGIS.
Кнопка Добавить поле в параметрах Поля и Ключевые поля используется только в ModelBuilder. В ModelBuilder, если предыдущий инструмент не был запущен или его производные данные не существуют, то параметры Поля и Ключевые поля могут не заполняться именами полей. Кнопка Добавить поле позволяет добавлять нужные поля, так что вы можете закрыть диалоговое окно Создать таблицу запроса и продолжить построение модели.
Если входные таблицы из файловой базы геоданных, соединение таблиц в целом происходит в последовательности, перечисленной в параметре Входные таблицы. Например, если Таблица1 находится в списке до Таблицы2, Таблица2 будет присоединена путем получения строки из Таблицы1, затем получения соответствующих строк из Таблицы2. Однако, если это приведет к построению запроса Таблицы2 на не проиндексированном поле, а возвращение порядка приведет к построению запроса Таблицы1 на проиндексированном поле, порядок будет изменен с целью повышения производительности. Это единственная логика оптимизации запроса при использовании данных файловой базы геоданных с этим инструментом. В общем, соединения в файловой базе геоданных наиболее эффективны, когда они имеют кардинальность один-ко-многим и один-к-одному.
Синтаксис
arcpy.management.MakeQueryTable(in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
Параметр | Объяснение | Тип данных |
in_table [in_table,...] | Имя таблицы или таблиц, которые будут использоваться в запросе. Если указано несколько таблиц, с помощью параметра where_clause можно задать правила их соединения. Входная таблица может быть из базы геоданных или из подключения к базе данных. | Table View; Raster Layer |
out_table | Имя слоя или представления таблицы, которое будет создано. | Table View; Raster Layer |
in_key_field_option | Указывает, как будет создаваться поле ObjectID для запроса. Для слоев и представлений таблиц в ArcGIS необходимо поле ObjectID. ObjectID – это поле целочисленных уникальных значений, используемых для однозначной идентификации строк данных. По умолчанию – Использовать ключевые поля (USE_KEY_FIELDS в Python).
| String |
in_key_field [in_key_field,...] (Дополнительный) | Поле или комбинация полей, которые могут быть использованы для идентификации строки в запросе. Этот параметр используется только при выбранной опции in_key_field_option = "USE_KEY_FIELDS". | Field |
in_field [[field, {alias}],...] (Дополнительный) | Поля, которые будут включены в результирующий слой или представление таблицы. Если для поля установлен псевдоним, то именно он будет отображаться. Если не заданы поля, будут включены все поля из входной таблицы. Если в перечень полей добавляется поле Shape, результатом будет слой; в противном случае результатом будет представление таблицы. | Value Table |
where_clause (Дополнительный) | SQL-выражение, использованное для выбора поднабора записей. | SQL Expression |
Пример кода
MakeQueryTable, пример 1 (окно Python)
Пример скрипта окна Python для использования функции MakeQueryTable в режиме прямого запуска.
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'")
MakeQueryTable, пример 2 (автономный скрипт)
Следующий скрипт является примером использования инструмента MakeQueryTable в автономном режиме 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
# Local variables...
tableList = ["c:/Connections/balrog.odc/vtest.COUNTIES",\
"c:/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")
Параметры среды
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да