首先让我说我在SQL Server 2005上运行,所以我没有访问权限MERGE.
我有一个约150k行的表,我每天从文本文件更新.当行从文本文件中删除时,我需要从数据库中删除它们,如果它们发生变化或者是新的,我需要相应地更新/插入.
经过一些测试后,我发现性能方面明智的是,执行完全删除然后从文本文件批量插入而不是通过执行更新/插入的行逐行读取是指数级更快.但是我最近遇到了一些讨论MERGE使用临时表和UPDATE语句输出来模仿SQL Server 2008功能的帖子.
我对此感兴趣,因为我正在调查当表没有行时如何消除删除/批量插入方法中的时间.我仍然认为这种方法将是最快的,所以我正在寻找解决空表问题的最佳方法.
谢谢
我有一个数据库表我试图用存储过程进行UPDATE/INSERT.让我们像这样定义表:
CREATE TABLE Foo
(
Id INT IDENTITY(1, 1),
Name VARCHAR(256) NOT NULL,
ShortName VARCHAR(32),
Sort INT
);
Run Code Online (Sandbox Code Playgroud)
我写了一个类似于以下的存储过程:
CREATE PROCEDURE Put_Foo
(
@Id INT = NULL OUTPUT,
@Name VARCHAR(256),
@ShortName VARCHAR(32) = NULL,
@Sort INT = NULL
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
@Id = F.Id
FROM
Foo AS F
WHERE
F.Name = @Name;
IF (@Id IS NOT NULL)
BEGIN
UPDATE
Foo
SET
ShortName = @ShortName,
Sort = @Sort
WHERE
Id = @Id;
END
ELSE
BEGIN
INSERT
INTO …Run Code Online (Sandbox Code Playgroud) 我正在尝试将日志从 Kubernetes 集群写入 Elasticsearch 索引。Fluent-bit 用于读取标准输出,并使用包括 Pod 标签在内的元数据来丰富日志。一个简化的日志对象示例是
{
"log": "This is a log message.",
"kubernetes": {
"labels": {
"app": "application-1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是部署到集群的一些其他应用程序具有以下格式的标签:
{
"log": "This is another log message.",
"kubernetes": {
"labels": {
"app.kubernetes.io/name": "application-2"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些应用程序是通过 Helm 图表安装的,较新的应用程序遵循此处列出的标签和选择器约定。标签和选择器的命名约定于 2018 年 12 月更新,请参见此处,但并非所有图表都已更新以反映这一点。
最终结果是,根据哪种类型的标签格式首先将其纳入弹性索引,尝试发送其他类型将引发映射异常。如果我创建一个新的空索引并首先发送命名空间标签,则尝试记录简单app标签将引发此异常:
object mapping for [kubernetes.labels.app] tried to parse field [kubernetes.labels.app] as object, but found a concrete value
Run Code Online (Sandbox Code Playgroud)
相反的情况,第二个发布命名空间标签,会导致此异常:
Could not dynamically add mapping for field [kubernetes.labels.app.kubernetes.io/name]. …Run Code Online (Sandbox Code Playgroud) elasticsearch logstash kubernetes kubernetes-helm fluent-bit
所以我有两个表,问题和答案,由多对多关系表,QuestionsAnswers加入.问题有一个排序列,允许我控制它们向用户显示的方式,而QuestionsAnswers也有一个排序列,允许我控制每个问题的答案顺序.我的问题是我正在尝试编写一个SQL查询,它将选择所有问题及其答案首先由Question.Sort然后由QuestionsAnswers.Sort排序.两个排序列都可以为空,这些列中的整数应优先于空值.
我可以通过Questions.Sort获得订单工作正常但是一旦我添加了第二个排序列,它就会出错.例如,如果一个问题的排序= 0意味着它应该是显示的第一个问题,但没有对其答案的任何偏好,它将在一个Questions.Sort = null和QuestionsAnswers.Sort = 0的QuestionsAnswers行下面排序. .
任何提示或想法,如果这是可行的将是伟大的.
编辑:
SELECT
Q.Id AS QuestionId,
Q.Name AS Question,
A.Id AS AnswerId,
A.Text AS Answer
FROM
dbo.Questions AS Q
INNER JOIN
dbo.QuestionsAnswers AS QA
ON Q.Id = QA.QuestionId
INNER JOIN
dbo.Answers AS A
ON QA.AnswerId = A.Id
ORDER BY
ISNUMERIC(Q.Sort) DESC,
Q.Sort,
Q.Id,
A.Text;
Run Code Online (Sandbox Code Playgroud) sql ×3
bulkinsert ×1
fluent-bit ×1
kubernetes ×1
logstash ×1
null ×1
performance ×1
select ×1
sql-order-by ×1
sql-server ×1