AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-2193

RK Kuppala's questions

Martin Hope
RK Kuppala
Asked: 2016-12-22 21:56:49 +0800 CST

Azure SQL Warehouse - Ingestão de Dados - Converter um enorme arquivo de largura fixa (com vírgulas) para delimitado

  • 5

Nem tenho certeza se estou formulando esta pergunta corretamente, mas tentarei - tenho vários arquivos de texto enormes gerados a partir de uma exportação do Oracle em um sistema Linux. Cada arquivo tem cerca de 30 GB de tamanho e eu tenho cerca de 50 deles.

O objetivo é exportar esses dados para o Azure SQL Data Warehouse. O BCP, neste caso, não é a abordagem certa tendo em mente o tamanho dos dados, então tive que usar o Polybase.

Depois de converter da codificação ASCII para UTF8, tive um problema ao consultar as tabelas externas. Polybase não funciona bem com o arquivo de texto de largura fixa com uma quebra de linha em cada linha.

O arquivo de texto se parece com isto:

101.102.103.104.105.106.107
108.108.109.110.111.112.113
114.115.116.117.118.119.120
121.122.123

--nada aqui, apenas uma linha em branco

201.202.203.204.205.206.207
208.209.210.211.212.213.214
215.216.217

O Polybase tenta processar de 101 a 107 e apresenta erros reclamando que não havia colunas suficientes neste arquivo para processar.

Aqui está o que eu acho que está acontecendo: a largura fixa e as quebras de linha estão fazendo com que trate a quebra de linha como um delimitador de linha.

Como faço para converter este arquivo para ficar como abaixo:

101,102,103,104,105,106,107,108,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123{CR}{LF}
201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217{CR}{LF}

EDIT: Aqui estão os dados de amostra de um arquivo. Abri no git bash em uma VM do Windows.

Esses arquivos devem ter 167 colunas ,como separador de colunas. O problema é que, como cada linha gera várias linhas, é difícil processá-las nas tabelas externas do Polybase.

import polybase
  • 3 respostas
  • 1807 Views
Martin Hope
RK Kuppala
Asked: 2016-11-17 08:35:25 +0800 CST

Contando sessões com um intervalo de tempo

  • 0

Se tivermos uma tabela no SQL Server com os seguintes dados:

ID      Log_Time
1110    2016-10-31 20:34:50.000
1110    2016-10-31 20:34:58.000
1110    2016-10-31 20:35:03.000
1110    2016-11-01 01:28:29.000
1110    2016-11-01 01:28:33.000
1110    2016-11-01 01:28:37.000
1110    2016-11-01 01:28:42.000
1110    2016-11-01 01:28:46.000
1110    2016-11-01 01:28:50.000
1110    2016-11-01 01:28:54.000
1110    2016-11-01 01:28:59.000
1110    2016-11-01 01:29:03.000

Digamos que cada ação do usuário gere uma entrada log_time. A empresa calcula o número de sessões para fins de cobrança como este - comece com a sessão 1 e, para cada atividade de registro, se a diferença de horário for superior a uma hora, incremente a contagem da sessão em 1.

Esta é uma tabela bastante grande com diferentes IDs de usuário. Eu tentei uma combinação de cursores para percorrer usuários distintos e WHILE LOOPS para incrementar fazendo a sessão conta iterando linha por linha. Leva muito tempo para ser concluído e, quando essa tabela cresce, essa pode nem ser a abordagem correta. Deve haver uma maneira melhor de fazer isso. Alguma indicação?

O conjunto de resultados que preciso é este:

ID     SessionCount
1110   28
1145   42
1116   38
sql-server sql-server-2012
  • 1 respostas
  • 244 Views
Martin Hope
RK Kuppala
Asked: 2016-05-23 10:02:05 +0800 CST

Data warehouse do Azure - problemas de funções definidas pelo usuário

  • 7

Alguém aqui teve sorte em criar e usar UDFs no banco de dados do data warehouse do Azure ? Estou no meio da migração de um warehouse local do SQL Server 2014 para o datawarehouse do Azure e tive um problema com UDFs.

CREATE FUNCTION dbo.fn_GetImpliedRate (@Multiple float, @term int)
RETURNS float
AS
BEGIN
    DECLARE @ImpInt float
    IF(@Term = 1)
        SET @ImpInt = (select [1] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 2)
        SET @ImpInt = (select [2] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 3)
        SET @ImpInt = (select [3] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 4)
        SET @ImpInt = (select [4] from  dbo.ImpliedRate where Multiple = @Multiple); 

RETURN @ImpInt

END;
GO

Este UDF funciona perfeitamente no SQL Server 2014. Quando eu o crio no data warehouse do Azure, ele é criado, mas não funciona quando o consulto. Ele retorna um NULL. Eu verifiquei coisas óbvias como se a tabela de destino existe, etc. Examinei a documentação CREATE FUNCTION para o data warehouse do Azure e há um UDF de exemplo que converte intem um arquivo decimal. Isso funciona perfeitamente no Azure DW. No momento em que escrevo uma função simples que possui um select, ela falha. Infelizmente, a documentação do Azure aqui não é muito útil e gostaria de saber se algum de vocês teve esse problema. Se sim, como resolveu?

Acabei de testar outro caso de uso e também não funciona:

CREATE function [dbo].[fn_GetNumberBusinessDays] 
(
    @StartDate datetime,
    @EndDate Datetime
)
returns int
as 
begin 

DECLARE @NDAYS INT = 0
SELECT @NDAYS = 
  ISNULL( (DATEDIFF(dd, @StartDate, @EndDate) + 1)
  -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
  -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
  -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) - 1 ,0) + 1


 SELECT @NDAYS = @NDAYS - COUNT(*)
 FROM dbo.FedHolidays
 WHERE DateOfHoliday BETWEEN @StartDate AND @EndDate


 RETURN @NDAYS
end
GO
sql-server functions
  • 3 respostas
  • 5846 Views
Martin Hope
RK Kuppala
Asked: 2014-05-06 21:37:14 +0800 CST

Por que meu guia de plano não está sendo usado?

  • 9

Recentemente, encontramos o problema do ponto de inflexão e algumas de nossas consultas de relatório que costumavam ser executadas em alguns segundos agora estão levando mais de 2 minutos porque o otimizador de consulta simplesmente ignora o índice não clusterizado na coluna de pesquisa. Um exemplo de consulta abaixo:

select top 100 *
from   [dbo].[t_Call]
where  ID > 0 
  and  throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
order by id

A IDcoluna é um índice clusterizado e Throwtimetem um índice não clusterizado. Nesse caso, notamos que ordenar por, throwtimeem vez de IDalterar, é usado o plano de consulta e o índice não clusterizado. Também estamos planejando arquivar alguns dos dados antigos (atualmente tem 20 milhões de linhas!!). Mas fazer essas alterações no aplicativo levará algum tempo e preciso encontrar uma maneira de fazer com que os relatórios sejam executados razoavelmente rápido, sem fazer alterações no nível do aplicativo (bem, a vida é assim!).

Insira o guia de plano. Eu criei o guia de plano abaixo com uma dica de consulta de índice não clusterizado e, por algum motivo, o índice não clusterizado ainda não é usado. Estou esquecendo de algo?

EXEC sp_create_plan_guide 
@name = N'[prod2reports_callthrowtime]', 
@stmt = N'select top 100 *
          from   [dbo] . [t_Call]
          where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@type = N'SQL', 
@module_or_batch = N'select top 100 *
                     from   [dbo] . [t_Call]
                     where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID', 
@params = N'@0 int, @1 datetime, @2 datetime', 
@hints = N'OPTION (TABLE HINT( [dbo] . [t_Call],
                   INDEX(IDX_NC_t_call_ThrowtimeProblemCodes)))'
GO
sql-server performance
  • 2 respostas
  • 2984 Views
Martin Hope
RK Kuppala
Asked: 2013-04-04 23:11:50 +0800 CST

Precisa de ajuda para converter este cursor em uma operação baseada em conjunto

  • 0

Eu tenho um procedimento armazenado que é executado como parte de uma atualização de banco de dados de relatório todas as noites, que leva cerca de 2 horas para ser concluída. O objeto B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP_T2tem 8 milhões de linhas. Você pode sugerir como posso converter esse cursor em uma abordagem baseada em conjunto para melhor desempenho? Um CTE pode ser usado?

ALTER PROCEDURE [dbo].[B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP2_SP] AS      
SET NOCOUNT ON        
DECLARE @SEQ SMALLINT,      
@CASEID DECIMAL,       
@ASSIGNED  NCHAR(30),      
@AUDITSTAMP DATETIME,      
@AUDITOPRID NCHAR(60),      
@STATUS NCHAR(10),      
@LASTCASEID DECIMAL,       
@PROVGRPID NCHAR(20)      
SET @SEQ = 1      
SET @LASTCASEID = @CASEID      

DROP TABLE B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP   

CREATE TABLE B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP (      
  SEQ_NUM SMALLINT,       
  CASE_ID DECIMAL,       
  ASSIGNED_TO NCHAR(30),       
  AUDIT_STAMP DATETIME,       
  AUDIT_OPRID NCHAR(60),      
  RC_STATUS NCHAR(10),      
  PROVIDER_GRP_ID NCHAR(20) )      
DECLARE AUDIT CURSOR FOR        
   SELECT CASE_ID, ASSIGNED_TO, AUDIT_STAMP, AUDIT_OPRID, RC_STATUS, PROVIDER_GRP_ID      
   FROM B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP_T2      

-- Open the cursor      
OPEN AUDIT      
FETCH NEXT      
   FROM AUDIT      
    INTO @CASEID, @ASSIGNED, @AUDITSTAMP, @AUDITOPRID, @STATUS, @PROVGRPID       
WHILE @@FETCH_STATUS = 0      

begin       
 INSERT INTO B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP       
 SELECT @SEQ, @CASEID, @ASSIGNED, @AUDITSTAMP, @AUDITOPRID, @STATUS, @PROVGRPID      

SET @LASTCASEID = @CASEID      
FETCH NEXT      
   FROM AUDIT      
    INTO @CASEID, @ASSIGNED, @AUDITSTAMP, @AUDITOPRID, @STATUS, @PROVGRPID      

SET @SEQ = CASE WHEN @CASEID <> @LASTCASEID THEN 1 WHEN @CASEID = @LASTCASEID THEN @SEQ + 1 END      
end      
-- Close and deallocate the cursor      
CLOSE AUDIT      
DEALLOCATE AUDIT
sql-server t-sql
  • 1 respostas
  • 984 Views
Martin Hope
RK Kuppala
Asked: 2012-05-22 07:08:28 +0800 CST

Exportar várias tabelas entre servidores

  • 5

Atualmente, temos um pacote SSIS que exporta cerca de 70 tabelas grandes todas as noites, com truncamento e carregamento no destino. Nossas tabelas continuam mudando, às vezes adicionamos algumas tabelas e removemos algumas e editar o pacote SSIS de acordo é cansativo.

Existe uma maneira de ter um arquivo de texto ou uma tabela com a lista de nomes de tabelas e ter um pacote SSIS para fazer um loop na tabela e realizar a exportação? Dessa forma, é mais fácil lidar com listas dinâmicas de tabelas que são exportadas.

Quaisquer links, ponteiros são apreciados.

sql-server ssis
  • 1 respostas
  • 3511 Views
Martin Hope
RK Kuppala
Asked: 2012-03-15 07:34:32 +0800 CST

Como obtenho uma lista de todas as tabelas particionadas no meu banco de dados?

  • 28

Como obtenho uma lista de todas as tabelas particionadas no meu banco de dados?

Quais tabelas de sistema/DMVs devo examinar?

sql-server sql-server-2008
  • 4 respostas
  • 137302 Views
Martin Hope
RK Kuppala
Asked: 2012-02-23 06:06:12 +0800 CST

Ajuste de consulta - SQL Server

  • 2

Um de nossos desenvolvedores está tentando executar a consulta abaixo em um servidor de desenvolvimento, que envolve extrair dados de um servidor vinculado, produção. A consulta foi executada por mais de 14 horas antes de ser interrompida.

Observei o plano de execução no SQL Sentry Plan Explorer - encontre o plano de execução abaixo.

Como essa consulta pode ser ajustada para melhor desempenho? Há algum erro flagrante na consulta? Existem dicas, postagens de blogs que me ajudarão a melhorar essa consulta?

Ambos os servidores envolvidos são SQL Server 2005

SELECT A.SETID
,A.CUST_ID
,A.CNTCT_SEQ_NUM
,A.NAME1
,A.TITLE
,C.DESCR
FROM PS_CUST_CONTACT A
,[linksrv].[prodDB].dbo.PS_BO_ROLE Z
,[linksrv].[prodDB].dbo.PS_RD_PERSON B
,[linksrv].[prodDB].dbo.PS_BO_ROLE_TYPE C
WHERE Z.BO_ID = B.BO_ID
AND Z.ROLE_TYPE_ID = C.ROLE_TYPE_ID
AND Z.ROLE_END_DT >= GETDATE()
AND A.EFFDT = (
    SELECT MAX(EFFDT)
    FROM PS_CUST_CONTACT CUST_CONTACT
    WHERE CUST_CONTACT.SETID = A.SETID
        AND CUST_CONTACT.CUST_ID = A.CUST_ID
        AND CUST_CONTACT.CNTCT_SEQ_NUM = A.CNTCT_SEQ_NUM
        AND CUST_CONTACT.EFFDT <= { FN CURDATE() }
    )
AND A.EFF_STATUS = 'A'
AND B.PERSON_ID IN (
    SELECT A1.PERSON_ID
    FROM PS_CONTACT A1
        ,PS_CONTACT_CUST B1
    WHERE A1.EFFDT = (
            SELECT MAX(A_ED.EFFDT)
            FROM PS_CONTACT A_ED
            WHERE A1.SETID = A_ED.SETID
                AND A1.CONTACT_ID = A_ED.CONTACT_ID
                AND A_ED.EFFDT <= SUBSTRING(CONVERT(CHAR, GETDATE(), 121), 1, 10)
            )
        AND A1.SETID = B1.SETID
        AND A1.CONTACT_ID = B1.CONTACT_ID
        AND B1.EFFDT = (
            SELECT MAX(B_ED.EFFDT)
            FROM PS_CONTACT_CUST B_ED
            WHERE B1.SETID = B_ED.SETID
                AND B1.CONTACT_ID = B_ED.CONTACT_ID
                AND B_ED.EFFDT <= A.EFFDT
            )
        AND A.CNTCT_SEQ_NUM = B1.CNTCT_SEQ_NUM
        AND A.SETID = B1.CUSTOMER_SETID
        AND A.CUST_ID = B1.CUST_ID
    )

insira a descrição da imagem aqui

sql-server sql-server-2005
  • 1 respostas
  • 326 Views
Martin Hope
RK Kuppala
Asked: 2012-02-21 05:38:17 +0800 CST

Estatísticas físicas do índice DMV - ID/tabela do objeto não encontrado

  • 2

Instalei o SQL Server 2012 RC0 em meu laptop recentemente e estava tentando uma demonstração que ilustra como o banco de dados reduzido causará fragmentação. Criei uma tabela, um índice clusterizado na coluna de identidade e inseri alguns registros e, em seguida, emiti o seguinte para verificar a fragmentação:

select avg_fragmentation_in_percent from sys.dm_db_index_physical_stats(DB_ID('databasename'), 
  OBJECT_ID('tablename'), 1, NULL, 'limited')

Esta é a mensagem de erro que recebo:

Could not find table or object ID 2139154666. Check system catalog.

Fiz um select * de sysobjects e o objeto existe com esse objectID. Por que o SQL Server pensa que não existe? O que estou fazendo errado?

sql-server dmv
  • 1 respostas
  • 1381 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve