Tool: translate_query
Translates a single SQL query or script into BigQuery SQL. The translation runs asynchronously. Use the get_translation tool with the returned translation ID to poll its state until it is SUCCEEDED or FAILED. Wait at least two seconds before rechecking the state. To translate multiple queries, use the translate_batch_queries tool instead. A SUCCEEDED state means the translator finished, not that the output is correct. Check translation_logs before using the output. Entries with severity ERROR mark parts of the output that are best effort. RelationNotFound, AttributeNotFound and MissingMetadataError mean the translator didn't know the schema of a referenced table or column. Unresolved types can appear in the output as ERROR_TYPE(...) or Error<error-type>, which is not valid BigQuery SQL. To fix the error, provide the schema by using a metadata .ZIP file generated using the BigQuery Migration Service metadata extractor. Upload the file to Cloud Storage and pass the path to the file in metadata_file_path. If the user did not supply a metadata file, ask for it before guessing. Only when no metadata can be provided, use generate_ddl_suggestion to infer approximate DDL from the query. NoSuchFunction means a function the translator couldn't map was copied into the output verbatim, wrapped in backticks. This query should be rewritten manually. The output isn't validated against BigQuery so it must be validated by using a BigQuery dry run, before it is used.
The following code sample shows how to use curl to call the translate_query MCP tool.
| Curl Request |
|---|
curl --location 'https://bigquerymigration.googleapis.com/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "translate_query", "arguments": { // Provide these details according to the MCP tool specification. } }, "jsonrpc": "2.0", "id": 1 }' |
Input Schema
Request message for TranslateQuery.
TranslateQueryRequest
| JSON representation |
|---|
{
"projectNumber": string,
"location": string,
"inputQuery": string,
"sourceDialect": string,
"metadataFilePath": string,
"translationConfigs": [
{
object ( |
| Fields | |
|---|---|
projectNumber |
Required. The Google Cloud project number. |
location |
Required. The location. For more information, see Locations. |
inputQuery |
Required. The SQL query or script to translate. If it references tables or columns, also provide their schema in |
sourceDialect |
Required. The dialect of the source query. The following source to target dialect pairs are supported: source: Teradata, Bteq, Redshift, Oracle, HiveQL, Impala, SparkSQL, Snowflake, Netezza, AzureSynapse, Vertica, SQLServer, Presto, MySQL, Postgresql, Db2, SQLite, Greenplum, BigQuery; target: BigQuery. |
metadataFilePath |
Optional. The path to the metadata file in Cloud Storage. Format: |
translationConfigs[] |
Optional. Specifies the translation YAML configurations for this translation. For more information, see YAML configuration guidelines. |
targetDialect |
Required. The dialect of the target query. See list of supported pairs in source_dialect. |
TranslationConfig
| JSON representation |
|---|
{ "displayName": string, "content": string } |
| Fields | |
|---|---|
displayName |
Required. The display name of the configuration. Important: Name has to end with |
content |
Required. The content of the configuration. |
Output Schema
Response message for TranslateQuery.
TranslateQueryResponse
| JSON representation |
|---|
{ "translatedQuery": string, "translation": string, "translationState": string, "translationLogs": [ { object ( |
| Fields | |
|---|---|
translatedQuery |
The translated query. It is not validated against BigQuery; check |
translation |
The ID of the migration workflow created for this translation. Use this ID with |
translationState |
The current state of the translation, for example, |
translationLogs[] |
A list of logs generated during the translation process. Entries with severity |
errorInfo |
The error information. |
Log
| JSON representation |
|---|
{ "severity": string, "category": string, "message": string, "action": string, "effect": string, "impactedObject": string } |
| Fields | |
|---|---|
severity |
Severity of the translation record, for example, |
category |
Category of the error or warning, for example, |
message |
Detailed message of the record. |
action |
Recommended action to address the log. |
effect |
The effect or impact of the issue noted in the log. Effect can be one of the following values: |
impactedObject |
Name of the object that is impacted by the log message. |
ErrorInfo
| JSON representation |
|---|
{ "reason": string, "domain": string, "metadata": { string: string, ... } } |
| Fields | |
|---|---|
reason |
The reason for the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors. This should be at most 63 characters and match a regular expression of |
domain |
The logical grouping to which the "reason" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: "pubsub.googleapis.com". If the error is generated by some common infrastructure, the error domain must be a globally unique value that identifies the infrastructure. For Google API infrastructure, the error domain is "googleapis.com". |
metadata |
Additional structured details about this error. Keys must match a regular expression of An object containing a list of |
MetadataEntry
| JSON representation |
|---|
{ "key": string, "value": string } |
| Fields | |
|---|---|
key |
|
value |
|
Tool Annotations
Tool annotations are sent to MCP clients to describe the basic risk of a given tool. Most clients treat these hints as untrusted, but they can be used to decide when a confirmation prompt might be sent to a user.
Along with the title string, the following boolean hints are defined as follows:
readOnlyHint: If true, the tool doesn't modify its environment. Default: false.destructiveHint: If true, then the tool can perform destructive actions. If false, then the tool can only perform additive actions. Default: true.idempotentHint: If true, then calling the tool repeatedly with the same arguments will have no additional effect on its environment. Default: false.openWorldHint: If true, then the tool can interact with an 'open world' of external entities. If false, then the tool can only interact with internal entities. For example, a web search tool would be open world, while a memory tool would not be open world.
Destructive Hint: ❌ | Idempotent Hint: ❌ | Read Only Hint: ❌ | Open World Hint: ❌