1
resposta

[PySpark] Dúvida sobre mais de 1 subquery

Bom dia.

Tenho um código que estou tentando executar no livy.pyspark em um notebook Zeppelin que possui uma query atribuída a uma variável chamada "sql" que é executada no Hive e atribuída a um Dataframe com o comando.

df = hive.sql(sql)

O SQL tem uma sintaxe com alguns joins simples e condições simples que funcionam no Oracle nativo, do tipo: select * from tabela1 b join tabela2 c on b.id_chave = c.id_chave where exists ( ... ) and not exists ( ... where data ) and not exists ( ... )

mas que aparece a seguinte mensagem de erro quando tento executar: " An error ocurred while calling o115.sql . . Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10249]: Line 32:16 Unsupported SubQuery Expression 'data': Only 1 SubQuery expression is supported."

Como posso proceder para que seja aceita mais de 1 subquery ou o que posso estar fazendo de indevido para causar um erro como esse ?

1 resposta

Oi, Rodrigo! Como vai?

Vendo o erro que apareceu, o Hive está reclamando do uso de mais de uma subquery dentro da cláusula WHERE, principalmente quando se usa múltiplos EXISTS e NOT EXISTS. Isso acontece porque algumas versões do Hive limitam esse tipo de construção, aceitando apenas uma subquery desse tipo por vez.

Para contornar esse problema, você pode reescrever sua consulta usando joins com filtros, em vez de subqueries. Por exemplo, um NOT EXISTS pode ser reescrito como um LEFT JOIN com condição de que o campo da tabela relacionada seja NULL. Assim, você evita o uso de múltiplas subqueries e o Hive consegue compilar a consulta sem problemas.

Com base no que você explicou, vale revisar a lógica da sua consulta e transformar essas subqueries em joins com filtros equivalentes. Essa abordagem costuma funcionar melhor no Hive, além de manter a performance e a legibilidade do seu código.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!