Descrição
mongotranslate é uma ferramenta de aprendizado projetada para ajudar os usuários a entender como as queries SQL podem ser expressas na linguagem de agregação MongoDB . O mecanismo de tradução SQL-to-aggregation do BI Connector fornece as traduções, que também podem ser usadas para solucionar problemas específicos de tradução do BI Connector .
mongotranslate é um programa autônomo . Requer um arquivo drdl gerado por mongodrdl, mas não requer que mongosqld ou mongod estejam em execução no momento da execução.
Uso
mongotranslate tem a seguinte sintaxe:
mongotranslate [--query | --queryFile] <query | queryfile> [options]
Opções de linha de comando
--queryEspecifica uma query SQL para traduzir em um pipeline de agregação MongoDB . É necessário
--queryou--queryFile.
--queryFileEspecifica um caminho para um arquivo contendo uma query SQL para traduzir em um pipeline de agregação MongoDB . É necessário
--queryou--queryFile.
--schemaObrigatório. Especifica um arquivo de esquema do
.drdlou um diretório contendo um ou mais arquivos de esquema do.drdlcriados pelo programamongodrdlpara utilizar ao converter uma query SQL em um pipeline de agregação .
--dbNamePadrão:
testO nome do banco de dados a ser usado para nomes de tabelas não qualificados na query SQL.
O exemplo a seguir usa uma coleção chamada
fruite a opção--dbNamepara especificar quefruitestá no banco de dadosgroceries:mongotranslate "SELECT * FROM fruit WHERE _id > 100;" \ --schema schema.drdl --dbName groceries Se você não utilizar a opção
--dbNamepara especificar um banco de dados,mongotranslatepressupõe quefruitesteja no banco de dadostest. Se o esquema não contiver um banco de dados denominadotestou um nome de tabelafruitno banco de dadostest,mongotranslateretornará um erro.O exemplo a seguir utiliza um nome de tabela totalmente qualificado, portanto não precisa da opção
--dbName.mongotranslate "SELECT * FROM groceries.fruit WHERE _id > 100;" \ --schema schema.drdl Se você especificar um banco de dados de dados com cada nome de tabela em sua query SQL, a opção
--dbNameserá ignorada se for utilizada.
--explainOpcional. Retorna a saída
explainpara o plano de consulta em vez do pipeline de agregação traduzido. Usar--explainretorna uma saída semelhante à execuçãoEXPLAIN <query>em uma ferramenta de BI conectada ao BI Connector.
--formatPadrão:
multilineOpcional. As opções válidas são
noneemultiline. A opçãomultilinepadrão exibe resultados em um formato mais legível.Tipo de comandoOpçãoDescriçãoSem a
--explainopção--format noneRetorna um pipeline de agregação em uma linha.
Sem a
--explainopção--format multilineRetorna um pipeline de agregação com um estágio de pipeline por linha.
Com a
--explainopção--format noneRetorna todos os campos em uma linha.
Com a
--explainopção--format multilineRetorna um campo por linha, com formatação adicional para arrays e subcampos de objeto.
Exemplos
O exemplo a seguir especifica uma query in-line para tradução:
mongotranslate --query=“select test.name from restaurants where name like 'Brooklyn%'” \ --schema=schema.drdl
O comando acima retorna os seguintes resultados:
[ {"$match": {"name": {"$regex": "^Brooklyn.*$","$options": "i"}}}, {"$project": {"test_DOT_restaurants_DOT_name": "$name","_id": {"$numberInt":"0"}}}, ]
Observação
Se for necessário colocar aspas em uma string dentro do parâmetro --query, use aspas simples. Caso seja necessário usar aspas duplas ou backticks na query, use a opção --queryFile.
O exemplo a seguir especifica um arquivo de query e retorna um resultado de uma linha:
mongotranslate --queryFile=query.txt --schema=schema.drdl --format=none
O exemplo a seguir utiliza a opção --explain :
mongotranslate --query="select count(name) from restaurants;" \ --schema=schema.drdl --explain
O comando acima retorna os seguintes resultados:
[ { "ID": 1, "StageType": "MongoSourceStage", "Columns": "[{name: 'count(name)', type: 'int'}]", "Sources": null, "Database": {}, "Tables": {}, "Aliases": {}, "Collections": {}, "Pipeline": {}, "PipelineExplain": {}, "PushdownFailures": null } ]