数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
SQL Server中是否有用于编程ETL的标准语言/界面?
我目前正在为我们的数据仓库创建ETL。我们正在使用SSIS 2008,但是我们遇到了问题,其中最大的就是难以重用组件。每个表都有单独的程序包,每个程序包都将父程序包中的多个变量作为输入。当我们对这些输入变量进行更改时,我们需要进入每个程序包(现在有15个左右,但是这个数字将大大增加)并修改程序包以应对这些更改。还有其他问题,包括无法为我们的提取运行任意SQL,不良的日志记录功能等。 如果有一种方法可以开发代码中的ETL,实现代码重用,通用库,更好的单元测试等,那么整个过程将更加健壮。是否存在用于SQL Server的事实上的标准ETL语言/ API?我希望尽可能避免使用GUI工具。 编辑:我应该提到我的背景。我不是DBA,也没有正式(或非正式)的DBA培训,随着我的发展,我基本上已经了解了这些内容,因此,我很可能尝试使用SSIS进行不合适的工作或尝试使用此ETL。从错误的角度投射。另外,我目前在州政府工作,所以任何需要购买新软件包的解决方案都不在可能范围之内。 这是我们的任务之一。我们正在使用一个SSIS包来加载仓库中的每个表。每个Fact程序包和Dimension程序包通常都相同,只是它们的区别在于 从源数据库中提取 数据流中的操作 合并到目标表 我想做的(我发现在SSIS中很难做) 从文本文件加载提取查询。当开发人员编写和测试其提取查询时,我不必在SSIS运行它之前以任何方式操纵他们的查询,也不必将查询剪切并粘贴到DB Source对象中。 分别测试每个组件。我应该能够独立地测试单个表的完整ETL过程,而与其他表负载无关。 在一处修改共享逻辑,而不必编辑每个单独的程序包。每个包都以相同的方式将数据加载到审核表中,如果我想更改已加载已审核的数据,则不需要编辑所有15个包(随着时间的推移,这个数量会变得更大)。 如果适当地使用共享代码以编程方式完成,则整个过程感觉将更容易实现,并且更加健壮。
10 sql-server  etl 


3
使字段唯一会使索引吗?
如果unique对字段进行约束,是否还需要在该字段上建立索引才能获得可伸缩的插入时间?或者这是为我完成的(即使它使用的索引不能公开访问?) 具体来说,我正在与Apache Derby一起进行原型设计,尽管我可能会在不久的将来将其移至MySQL。我也希望SQL标准中可能有一些说明。 我将永远不需要按此字段进行搜索,因此我宁愿不要创建无用的索引。但是我宁愿使用无用的索引也不愿使用O(n)插入时间。

4
优化大表上的联接
我试图从正在访问具有约2.5亿条记录的表的查询中获得更多性能。从我对实际(未估计)执行计划的阅读中,第一个瓶颈是如下查询: select b.stuff, a.added, a.value from dbo.hugetable a inner join #smalltable b on a.fk = b.pk where a.added between @start and @end; 有关所涉及的表和索引的定义,请参见下文。 执行计划表明在#smalltable上使用了一个嵌套循环,并且对largetable的索引扫描已执行480次(对于#smalltable中的每一行)。这对我来说似乎是倒退的,因此我尝试强制使用合并联接: select b.stuff, a.added, a.value from dbo.hugetable a with(index = ix_hugetable) inner merge join #smalltable b with(index(1)) on a.fk = b.pk where a.added between @start and @end; …


3
数据库中的多维索引
哪些数据库使用实际的多维索引?oracle是否曾经使用多个索引从表中获取数据,还是会始终采用似乎具有最高选择性的索引?其他dbms怎么样?
10 index 


1
使用TDE进行数据库镜像
我需要镜像一些数据库,并在它们上使用透明数据加密(TDE),因为我们的数据必须在“静止”时进行加密。 我在主体和镜像上都设置了TDE。当我设置两个数据库的镜像时,我遇到了这个问题。由于我使用的是TDE,所以我不知道通过gui设置镜像的方法,因此我不得不使用t-sql来完成工作。 以下是我在镜像服务器上使用的代码 --Restore the full backup to the mirrored mdf and ldf OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password' RESTORE DATABASE TDE FROM disk = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak' WITH NORECOVERY, REPLACE, MOVE 'TDE' TO 'E:\TDE.mdf', REPLACE, MOVE 'TDE_log' TO 'G:\TDE.ldf' CLOSE MASTER KEY GO --Restore the log backup to the …

2
无法解释的InnoDB超时
我最近看到一些非常基本的更新超时,并且无法确定原因。一个例子: //#查询时间:51锁定时间:0已发送的行数:0已检查的行数:0 UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470); 同一日志中没有Lock_time> 0的条目。运行show innodb status也不会显示任何相关的锁。根据我的应用服务器日志(显示Mysql::Error: Lock wait timeout exceeded与mysql-slow日志中的每个对应条目相关的错误),此问题似乎正在影响至少5个不同的表。 有什么想法从这里去吗?我四面八方。谢谢。 编辑: 创建表`照片`( `id` int(11)NOT NULL auto_increment, `type` varchar(255)NOT NULL, `photo_album_id` int(11)非空, `user_id` int(11)NOT NULL, `title` varchar(255)默认为'Untitled', `description`文字, `credit` varchar(255)默认为NULL, photo_file_name varchar(255)默认为NULL, `photo_content_type` varchar(255)默认为NULL, `photo_file_size` int(11)默认为NULL, `photo_updated_at`日期时间默认为NULL, `position` …

4
mysqldump命令在哪里存储备份的数据库?
我正在尝试使用mysqldump命令通过Ubuntu中的终端备份数据库,并且成功。将备份的数据库放在哪里? 我这样运行命令: $ mysqldump -h localhost -u username - p database_name > back_up_db.sql 但不知道back_up_db.sql存储在哪里。
10 mysqldump  ubuntu 


4
在时间维度表中应该将索引放在哪里?
在阅读了该网站有关索引的问答后,我想到了一个问题。 如果使用的是时间维度表,而粒度级别较低则为日。索引应该放在哪里? Randy Melder的问题是:“索引”在RDBMS上意味着什么?说过 : 将索引视为“目录” ...即文件位置的指针的有序列表,又称偏移量 就时间维度而言,如果时间表存储了唯一年份的全天,则大多数数据研究可能针对特定的一天,特定的一周,特定的月份或特定的季度进行。 我的问题是:是否应该为所有这些字段设置索引? Day被认为是唯一的,因此对于这一天,我完全理解索引的使用。但是一个星期id将发生7次,一个月id将发生30/31次,一个季度id将或多或少发生120次。 还应该为那些字段添加索引吗? 还会有用吗? 我问你,因为在同一问题上,大卫·斯皮利特(David Spillett)说: 当然,添加过多的索引可能是一个糟糕的优化,因为用于存储索引的额外空间(如果您的DB看到许多写操作,则还有用于维护索引的IO负载)可能比最优读取请求稍差一些,这是一个更糟糕的问题。 ,所以不要过度操作。 那么,对于时间维度情况,最好的考虑因素是什么?




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.