Partilhar via


Erros do PolyBase e possíveis soluções

Aplica-se a:SQL Server

Este artigo contém cenários de erro comuns e soluções para PolyBase.

Para obter mais informações sobre monitoramento e solução de problemas do PolyBase, consulte Monitorar e solucionar problemas do PolyBase.

Para obter locais comuns de arquivos de log do PolyBase no Windows e Linux, consulte Monitorar e solucionar problemas do PolyBase.

Mensagens de erro e possíveis soluções

Ocorreu uma falha na atualização do SQL Server 2022 devido a um nome de coluna inválido (sensível a maiúsculas e minúsculas)

Esse erro pode acontecer ao aplicar a instalação de atualizações cumulativas do SQL Server em um servidor com o recurso PolyBase instalado e usando o agrupamento sensível a maiúsculas e minúsculas, a mensagem de atualização de erro relatada é a seguinte:

Exemplo de mensagem de erro: Error: 912, Severity: 21, State: 2. Script level upgrade for database 'master' failed because upgrade step 'polybase_database_upgrade.sql' encountered error 200, state 7, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.

Reason:

Durante o procedimento de atualização, o script do SQL Server falha em terminar com sucesso devido a valores sensíveis a maiúsculas e minúsculas.

Solução: Esse problema será corrigido permanentemente na próxima atualização cumulativa.

Solução alternativa:

  1. Habilite o sinalizador de rastreamento 902.
  2. Inicie o SQL Server.
  3. Altere a coleção da base de dados 'DWConfiguration' de CS (sensível a maiúsculas e minúsculas) para CI (insensível a maiúsculas e minúsculas).
  4. Execute novamente a atualização.
  5. Desative o sinalizador de rastreamento 902.
  6. Reinicie o SQL Server.
  7. Altere a intercalação do banco de dados 'DWConfiguration' para trás, de CI (não diferencia maiúsculas de minúsculas) para CS (diferencia maiúsculas de minúsculas).

Como alternativa aos sinalizadores de rastreamento, para evitar que o problema aconteça antes de uma atualização cumulativa, verifique se o banco de dados 'DWConfiguration' está usando um agrupamento sensível a maiúsculas e minúsculas (CS). Considere alterá-lo para agrupamento sem diferenciação de maiúsculas e minúsculas (CI), aplique a atualização cumulativa, altere-a de volta para o original.

Erro: "100001; Falha ao gerar plano de consulta"

O erro "Falha ao gerar plano de consulta" pode ocorrer quando o mecanismo de banco de dados do SQL Server foi corrigido para pelo menos a Atualização Cumulativa 8 (15.0.4073), mas o recurso PolyBase não foi atualizado para a mesma compilação. Isso pode ocorrer ao adicionar o recurso PolyBase a uma instância existente do SQL Server. Para obter mais informações, consulte Erro do PolyBase - 100001; Falha ao gerar plano de consulta.

Sempre acompanhe a instalação do recurso PolyBase atualizando o novo recurso para o mesmo nível de versão. Instale service packs (SPs), atualizações cumulativas (CUs) e/ou versões de distribuição geral (GDRs) conforme necessário. Para determinar a versão do PolyBase, consulte Determinar a versão, edição e nível de atualização do SQL Server e seus componentes.

Alteração da conta de serviço

Exemplo de mensagem de erro:

107035; Falha na autorização do Dms devido a [DOMÍNIO\usuário] não ser membro do grupo [PdwDataMovementAccess]
107017; Cabeçalho de controle DMS inválido:

Este erro é provavelmente devido à alteração da conta de serviço PolyBase. Para alterar as contas de serviço do PolyBase Engine e do serviço PolyBase Data Movement, desinstale e reinstale o recurso PolyBase.

Erros de permissões do serviço de movimentação de dados

Para obter mais informações sobre como solucionar problemas de permissões com o serviço de movimentação de dados, consulte Permissões de conta de serviço PolyBase e erros comuns observados quando eles estão faltando.

Falha de autenticação do Windows

Para obter mais informações sobre como solucionar problemas de permissões relacionados a uma falha na autenticação do Windows, consulte Permissões de conta de serviço PolyBase e erros comuns observados quando eles estão faltando.

Não é possível executar a consulta "Consulta remota"

Exemplo de mensagem de erro:

Msg 7320, Nível 16, Estado 110, Linha 14
Não é possível executar a consulta "Consulta remota" no provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)". Consulta anulada -- o limite máximo de rejeição (0 linhas) foi atingido durante a leitura de uma fonte externa: 1 linha rejeitada de um total de 1 linha processada. (/nação/sensors.ldjson.txt)Coluna ordinal: 0, Tipo de dados esperado: INT, Valor ofensivo: {"id":"S2740036465E2B","time":"2016-02-26T16:59:02.9300000Z","temp":23.3,"hum":0.77,"wind":17,"press":1032,"loc":[-76.90914996169623,38.8929314364726]} (Erro de conversão de coluna), Erro: Erro ao converter o tipo de dados NVARCHAR para INT.

Tenha em mente que pode haver derivações desse erro. O nome do primeiro arquivo rejeitado é exibido no SQL Server Management Studio (SSMS) com tipos de dados ou valores ofensivos.

Possível motivo:
A razão pela qual esse erro acontece é porque cada arquivo tem um esquema diferente. A tabela externa DDL do PolyBase quando apontada para um diretório lê recursivamente todos os arquivos nesse diretório. Quando ocorre uma incompatibilidade de coluna ou tipo de dados, esse erro pode ser visto no SSMS.

Solução possível:
Se os dados de cada tabela consistirem em um arquivo, use o nome do arquivo na seção LOCATION prefixada pelo diretório dos arquivos externos. Se houver vários arquivos por tabela, coloque cada conjunto de arquivos em diretórios diferentes no Armazenamento de Blobs do Azure. Aponte LOCATION para o diretório em vez de um arquivo específico. Esta solução é recomendada.

Example:

Create External Table foo
(col1 int)WITH (LOCATION='/bar/foobar.txt',DATA_SOURCE…); OR
Create External Table foo
(col1 int) WITH (LOCATION = '/bar/', DATA_SOURCE…);

Observação

SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .

Suporte a Kerberos

O SQL Server está configurado para acessar um cluster Hadoop com suporte. A segurança Kerberos não é imposta no Hadoop Cluster.

Selecionar na tabela externa retorna o seguinte erro:

Msg 105019, Nível 16, Estado 1, Linha 55
O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para HdfsBridge_Connect: Erro [Não é possível instanciar LoginClass] ocorreu ao acessar o arquivo externo.'
Msg 7320, Nível 16, Estado 110, Linha 55
Não é possível executar a consulta "Consulta remota" no provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)". O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para HdfsBridge_Connect: Erro [Não é possível instanciar LoginClass] ocorreu ao acessar o arquivo externo.'

A interrogação do log do servidor DWEngine mostra o seguinte erro:

[Tópico:16432] [EngineInstrumentation:EngineQueryErrorEvent] (Erro, Alto):
O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para HdfsBridge_Connect: Ocorreu um erro [com.microsoft.polybase.client.KerberosSecureLogin] ao acessar o arquivo externo.' Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: EXTERNAL TABLE acesso falhou devido a erro interno: 'Exceção Java gerada na chamada para HdfsBridge_Connect: Erro [com.microsoft.polybase.client.KerberosSecureLogin] ocorreu ao acessar o arquivo externo.' >--- Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsAccessException: exceção Java gerada na chamada para HdfsBridge_Connect: Ocorreu um erro [com.microsoft.polybase.client.KerberosSecureLogin] ao acessar um arquivo externo.

Possível motivo:
O Kerberos não está habilitado no Cluster Hadoop, mas a segurança Kerberos está habilitada em core-site.xml, yarn-site.xmlou no hdfs-site.xml localizado por padrão em Arquivos de Programas\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf. No Linux, os arquivos estão localizados por padrão em /var/opt/mssql/binn/polybase/hadoop/conf/.

Solução possível:
Comente as informações de segurança do Kerberos dos arquivos acima mencionados.

Para obter mais informações sobre como solucionar problemas de conectividade Kerberos e PolyBase, consulte Solucionar problemas de conectividade Kerberos do PolyBase.

Erro interno do processador de consultas

Consultar uma tabela externa retorna o seguinte erro:

Msg 8680, Nível 17, Estado 5, Linha 118
Erro interno do processador de consultas: O processador de consultas encontrou um erro inesperado durante o processamento de uma fase de consulta remota.

O log do servidor DWEngine contém as seguintes mensagens:

[Tópico:5216] [ControlNodeMessenger:ErrorEvent] (Erro, Alto): ***** Sistema DMS desconectou nós :
[Tópico:5216] [ControlNodeMessenger:ErrorEvent] (Erro, Alto): ***** O Sistema DMS desconectou nós :
[Tópico:5216] [ControlNodeMessenger:ErrorEvent] (Erro, Alto): ***** O Sistema DMS desconectou os nós :

Possível motivo:
O motivo para esse erro pode ser que o SQL Server não foi reiniciado após a configuração do PolyBase.

Solução possível:
Reinicie o SQL Server. Verifique o Log do Servidor DWEngine para confirmar que não há desconexões DMS após a reinicialização.

Usuário necessário para acesso ao HDFS

Cenário:
O SQL Server está conectado a um cluster Hadoop não seguro (o Kerberos não está habilitado). O PolyBase está configurado para enviar computação para o cluster Hadoop.

Consulta de exemplo:

select count(*) from foo WITH (FORCE EXTERNALPUSHDOWN);

Uma mensagem de erro semelhante à seguinte é retornada:

Msg 105019, Nível 16, Estado 1, Linha 1
TABELA EXTERNA O acesso falhou devido a um erro interno: 'Exceção Java levantada na chamada para JobSubmitter_PollJobStatus: Erro [java.net.ConnectException: Call From big1506sql2016/172.16.1.4 to 0.0.0.0:10020 failed on connection exception: java.net ConnectException: Connection refused: no more information; Para obter mais informações, consulte: http://wiki.apache.org/hadoop/ConnectionRefused] ocorreu ao acessar o arquivo externo.'
O provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)" retornou a mensagem "Erro não especificado".
Msg 7421, Nível 16, Estado 2, Linha 1
Não é possível buscar o conjunto de linhas do provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)". .

Erro de log do Hadoop Yarn:

Falha na configuração do trabalho: org.apache.hadoop.security.AccessControlException: Permissão negada: user=pdw_user, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x em org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265) em org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251) em org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:232) org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:176) em org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5525)

Possível motivo:
Com o Kerberos desativado, o PolyBase usará pdw_user como o usuário para acessar o HDFS e enviar trabalhos do MapReduce.

Solução possível:
Crie pdw_user no Hadoop e dê a ele permissões suficientes para os diretórios usados durante o processamento do mapreduce. Certifique-se também de que pdw_user é o proprietário do diretório /user/pdw_user HDFS.

Abaixo está um exemplo de como criar diretório base e atribuir permissões para pdw_user:

sudo -u hdfs hadoop fs -mkdir /user/pdw_user
sudo -u hdfs hadoop fs -chown pdw_user /user/pdw_user

Depois disso, certifique-se de que pdw_user tem permissões de leitura, gravação e execução no diretório /user/pdw_user. Verifique se o diretório /tmp tem 777 permissões.

Para obter mais informações sobre como solucionar problemas de conectividade Kerberos e PolyBase, consulte Solucionar problemas de conectividade Kerberos do PolyBase.

Erro de memória Java devido a UTF-8

Cenário:
O SQL Server PolyBase é configurado com o Hadoop Cluster ou o Armazenamento de Blobs do Azure. Qualquer consulta Select falha com o seguinte erro:

Msg 106000, Nível 16, Estado 1, Linha 1
Espaço de heap do Java

Possível motivo:
A entrada ilegal pode causar o erro de falta de memória do Java. O arquivo pode não estar no formato UTF-8. O DMS tenta ler o arquivo inteiro como uma única linha porque não consegue decodificar o delimitador de linha, resultando em um erro de espaço de heap do Java.

Solução possível:
Converta o arquivo para o formato UTF-8, pois o PolyBase atualmente requer o formato UTF-8 para arquivos delimitados por texto.

Configuração de conectividade do Hadoop

Configurar o SQL Server PolyBase para se conectar ao Armazenamento de Blobs do Azure retorna a seguinte mensagem de erro no SQL Server:

Msg 105019, Nível 16, Estado 1, Linha 74
O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para HdfsBridge_Connect: Erro [No FileSystem for scheme: wasbs] ocorreu ao acessar o arquivo externo.'

Possível motivo:
A conectividade do Hadoop não está definida como o valor de configuração necessário para o acesso ao armazenamento Blob do Azure.

Solução possível:
Defina a conectividade Hadoop para um valor (de preferência 7) que ofereça suporte ao Armazenamento de Blobs do Azure e reinicie o SQL Server. Para obter uma lista de valores de conectividade e tipos suportados, consulte Configuração de conectividade PolyBase.

Erro em Criar Tabela Como Selecionar

Cenário:
A tentativa de exportar dados para o Armazenamento de Blobs do Azure ou para o sistema de arquivos Hadoop usando o PolyBase com a sintaxe CREATE EXTERNAL TABLE AS SELECT (CETAS) do SQL Server falha com a seguinte mensagem de erro:

Msg 156, Nível 15, Estado 1, Linha 177
Sintaxe incorreta perto da palavra-chave 'WITH'.
Msg 319, Nível 15, Estado 1, Linha 177
Sintaxe incorreta perto da palavra-chave 'com'. Se essa instrução for uma expressão de tabela comum, uma cláusula xmlnamespaces ou uma cláusula de contexto de controle de alterações, a instrução anterior deverá ser encerrada com um ponto-e-vírgula.

Possível motivo:
Ao exportar dados para Hadoop ou Armazenamento de Blobs do Azure via PolyBase, somente os dados são exportados, não os nomes de coluna (metadados), conforme definido no comando CREATE EXTERNAL TABLE.

Solução possível:
Crie a tabela externa primeiro e, em seguida, use INSERT INTO SELECT para exportar para o local externo. Para obter um exemplo de código, consulte Cenários de consulta PolyBase.

Falha ao criar tabela externa a partir do armazenamento de blobs do Azure

Cenário:
O pool SQL dedicado (anteriormente SQL DW) é configurado para importar dados do Armazenamento de Blobs do Azure. A criação da tabela externa falhou com a seguinte mensagem.

Msg 105019, Nível 16, Estado 1, Linha 34
O acesso externo à TABELA falhou devido a um erro interno: 'Exceção Java ocorrida ao chamar HdfsBridge_IsDirExist. Java exception message:com.microsoft.azure.storage.StorageException: O servidor não conseguiu autenticar a solicitação. Verifique se o valor do cabeçalho Authorization está formado corretamente, incluindo a assinatura.: Error [com.microsoft.azure.storage.StorageException: O servidor não conseguiu autenticar a solicitação. Verifique se o valor do cabeçalho Authorization está formado corretamente, incluindo a assinatura.] ocorreu ao aceder a um ficheiro externo.»

Possível motivo:
Foi utilizada a chave de armazenamento errada do Azure para criar a credencial com escopo de base de dados.

Solução possível:
Elimine todos os objetos relacionados (ou seja, fonte de dados, formato de arquivo) e, em seguida, elimine e recrie a credencial com âmbito para o banco de dados com a chave de armazenamento correta.

Configuração Kerberos: Capitalização

Cenário:
O SQL Server é configurado com o Cluster Cloudera habilitado para Kerberos. O SQL Server foi reiniciado após todas as alterações de configuração. Os serviços PolyBase Engine e PolyBase Data Movement estão em execução após a reinicialização. As seguintes mensagens de erro são retornadas:

Fonte de dados configurada sem local de rastreador de tarefas:

org.apache.hadoop.fs.FileSystem: Não foi possível instanciar o provedor org.apache.hadoop.fs.viewfs.ViewFileSystem

Fonte de dados configurada com o local do rastreador de tarefas:

Ocorreu um erro [Não é possível obter o realm Kerberos] ao acessar o arquivo externo

Possível motivo:
O valor da propriedade "hadoop.security.authentication" diz kerberos no core-site.xml.

Solução possível:
A propriedade "hadoop.security.authentication" do Coresite.xml deve ser KERBEROS (em maiúsculas) como valor.

Para obter mais informações sobre como solucionar problemas de conectividade Kerberos e PolyBase, consulte Solucionar problemas de conectividade Kerberos do PolyBase.

Mapred-site.xml estão em falta valores necessários

Cenário:
O SQL Server ou APS é configurado com o Cluster HDP suportado. Consultas que não exigem operações pushdown falham com a seguinte mensagem quando a dica 'FORCE PUSHDOWN' é usada, juntamente com as seguintes mensagens de erro:

Msg 7320, Nível 16, Estado 110, Linha 35
Não é possível executar a consulta "Consulta remota" no provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)". O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para JobSubmitter_PollJobStatus: Erro [org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
em org.apache.hadoop.mapreduce.v2.hs.HistoryClientService$HSClientProtocolHandler.getTaskAttemptCompletionEvents(HistoryClientService.java:277)
em org.apache.hadoop.mapreduce.v2.api.impl.pb.service.MRClientProtocolPBServiceImpl.getTaskAttemptCompletionEvents(MRClientProtocolPBServiceImpl.java:173)
em org.apache.hadoop.yarn.proto.MRClientProtocol$MRClientProtocolService$2.callBlockingMethod(MRClientProtocol.java:283)
em org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
em org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
em org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2127)
em org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2123)
em java.security.AccessController.doPrivileged(Método Nativo)
em javax.security.auth.Subject.doAs(Subject.java:415)
em org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2121)
] ocorreu ao aceder a um ficheiro externo.»

Possível motivo:
Mapred-site.xml está em falta de alguns valores necessários para verificar os resultados intermediários e finais.

Solução possível:
Adicione as propriedades a seguir e associe os valores corretos como mostra no Ambari no arquivo mapred-site.xml no SQL Server.

<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>

Configurando o acesso por nome de host

Cenário:
O SQL Server está configurado para acessar um cluster Hadoop com suporte. Criar uma tabela externa retorna um dos seguintes erros:

Não é possível executar a consulta "Consulta remota" no provedor OLE DB "SQLNCLI11" para o servidor vinculado "(nulo)". 110802; Ocorreu um erro DMS interno que fez com que esta operação falhasse. Detalhes: Exceção: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException, Mensagem: SqlNativeBufferReader.Run, erro em OdbcExecuteQuery: SqlState: 42000, NativeError: 8680, 'Erro ao chamar: SQLExecDirect(this->GetHstmt(), (SQLWCHAR *)statementText, SQL_NTS), código de retorno SQL: -1 | Informações de erro SQL: SrvrMsgState: 26, SrvrSeverity: 17, Erro <1>: ErrorMsg: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Erro interno do processador de consultas: O processador de consultas encontrou um erro inesperado durante o processamento de uma fase de consulta remota. | Erro ao chamar: pReadConn-ExecuteQuery>(statementText, bufferFormat) | estado: FFFF, número: 24, conexões ativas: 8', Cadeia de conexão: Driver={pdwodbc}; APP=RCSmall-DmsNativeReader:WAD1D16HD2001\mpdwsvc (3600)-ODBC-PoolId1433; Trusted_Connection=Sim; AutoTranslate=não; Servidor=\.\pipe\sql\query

[Tópico:30544] [AbstractReaderWorker:ErrorEvent] (Erro, alto): QueryId QID2433 PlanId 6c3a4551-e54c-4c06-a5ed-a8733edac691 StepId 7:
Não foi possível obter o bloco: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Não foi possível obter o bloco: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
em Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsBridgeReadAccess.Read(MemoryBuffer buffer, Boolean& isDone)
em Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DataReader.ExternalMoveBufferReader.Read()
em Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.ReadAndSendData()
em Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.Execute(Status do objeto)

Possível motivo:
Essa mensagem de erro pode aparecer quando o cluster Hadoop é configurado em uma configuração em que os nós de dados só são acessíveis fora do cluster usando o nome do host e não o endereço IP.

Solução possível:
Adicione o seguinte a hdfs-site.xml arquivo no lado do cliente (SQL Server). Essa configuração forçará o nó de nome a retornar um URI para os nós de dados com o nome do host em vez do endereço IP interno.

<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>

A organização da pasta impõe sobrecarga excessiva de memória

Cenário:
O SQL Server está executando uma consulta PolyBase em um diretório com um grande número de arquivos (>30.000 arquivos no caminho do diretório recursivamente) e uma das seguintes mensagens de erro é retornada:

Msg 105019, Nível 16, Estado 1, Linha 1
O acesso à tabela externa falhou devido a um erro interno: 'Exceção Java ocorrida ao chamar HdfsBridge_GetFileNameByIndex. Mensagem de exceção do Java: Limite de carga do GC ultrapassado: Ocorreu um erro [Limite de carga do GC ultrapassado] ao aceder ao ficheiro externo.

Msg 105019, Nível 16, Estado 1, Linha 1
O acesso à TABELA EXTERNA falhou devido a um erro interno: 'Exceção Java levantada na chamada para HdfsBridge_GetDirectoryFiles. Mensagem de exceção Java: Java heap space: Ocorreu um erro [Java heap space] ao acessar o arquivo externo.'

Possível motivo:
Ao processar um caminho, o PolyBase enumera todos os arquivos sob esse caminho e há sobrecarga de memória fixa associada à estrutura de dados usada para representar os arquivos. Com um grande número de arquivos, essa sobrecarga torna-se percetível e pode, eventualmente, consumir toda a memória disponível para a JVM.

Solução possível:
Reorganize os dados em vários diretórios para que cada diretório contenha um subconjunto de arquivos e, em seguida, divida a consulta em vários que operam em uma parte do caminho original de cada vez e materialize as tabelas como tabelas do SQL Server (antes de juntá-las).

Exemplo: Vamos supor que os dados da tabela externa estejam no seguinte local: Pedidos/file1.txt,...,file30K.txt.

Altere o layout para que os dados sejam dispostos em uma estrutura de partição de arquivo convencional em Orders/yyyy/mm/dd/file1.txt. Aponte sua tabela externa para um caminho de diretório inferior, como mês(mm) ou dia(dd), importe os arquivos para tabelas do SQL Server em partes e adicione-os como parte de uma tabela. Mesmo que você tenha a estrutura de diretórios certa para começar, siga a etapa #2 para poder trabalhar com muitos arquivos sem ficar sem memória JVM.

Caracteres inesperados em arquivos de configuração

Cenário:
Configuração do SQL Server ou APS com um cluster Hadoop, que envolve a modificação de yarn-site.xml, hdfs-site.xmle outros arquivos de configuração. A seguinte mensagem de erro do SQL Server é observada:

Msg 105019, Nível 16, Estado 1, Linha 1
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: o acesso à TABELA EXTERNA falhou devido a erro interno: 'Exceção Java levantada na chamada para HdfsBridge_Connect. Mensagem de exceção Java:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: byte 1 inválido da sequência UTF-8 de 1 byte.: Erro [com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: byte inválido 1 da sequência UTF-8 de 1 byte.] ocorreu ao aceder a um ficheiro externo.» --->

Possível motivo:
Isso pode acontecer se você tiver copiado e colado texto em arquivos de configuração de um site ou janela de bate-papo. É possível que caracteres indesejados/não imprimíveis estejam nos arquivos de configuração.

Solução possível:
Abra os arquivos em um editor de texto diferente (diferente do bloco de notas) e procure esses caracteres e elimine-os. Reinicie os serviços necessários.

Consulta de tabela delta pode falhar com erros 2571 e 16513

Cenário:
Você pode encontrar o seguinte erro ao consultar uma tabela Delta externa:

Msg 2571, Level 14, State 3, Line 1
User '<user>' does not have permission to run DBCC TRACEON.
Msg 16513, Level 16, State 0, Line 1
Error reading external metadata.

Possível motivo:
pt-PT: Isto pode acontecer porque há uma dica de QUERYTRACEON consulta que pode ser adicionada à consulta de metadados do arquivo Delta e que requer um papel de servidor sysadmin para execução.

Solução possível:
Se isso ocorrer, você pode resolver o problema habilitando globalmente o sinalizador de rastreamento 14073 e isso impedirá que a dica de consulta seja adicionada.

Consulte também