C# 为什么雅典娜不喜欢我的字符串字段?

C# 为什么雅典娜不喜欢我的字符串字段?,c#,amazon-athena,C#,Amazon Athena,我已经将一堆Gzip tsv文件推送到S3,Athena正在S3中解析它们。但是,字符串字段没有按预期工作。任何相等运算或类似的运算符都根本不起作用 表: 问题: 雅典娜解析了一切。现在让我们假设有一个用户名'foo' --nothing returned Select * From events Where username = 'foo' --nothing returned Select * From events Where username LIKE ‘%foo%’ --rec

我已经将一堆Gzip tsv文件推送到S3,Athena正在S3中解析它们。但是,字符串字段没有按预期工作。任何相等运算或类似的运算符都根本不起作用

表:

问题:

雅典娜解析了一切。现在让我们假设有一个用户名'foo'

--nothing returned
Select *
From events
Where username = 'foo'


--nothing returned
Select *
From events
Where username LIKE ‘%foo%’


--records returned
Select *
From events
Where username LIKE ‘%f%’


--nothing returned
Select *
From events
Where username LIKE ‘f%’

我用C语言构建了这些文件,并用System.Text.encoding.UTF8对它们进行编码。此外,我还使用GZipStream压缩了它们。也许我应该尝试使用varchar重新创建表,但是字符串似乎是推荐的类型……嗯,字符串字段

我怀疑你的字段被引用了,这就是当你说行格式分隔符时得到的结果。LazySimpleSerDe不会从字段中删除引号


您必须将数据更改为不带引号,或者使用支持引号的数据。

问题的关键在于编码

编码错误。在Athena中返回了Unicode=字符串字段,但不可搜索

GOOD Encoding.UTF8=返回并可搜索字符串字段


看起来没有查询返回结果,您确定表设置正确吗?SELECT*FROM events LIMIT 10是否返回任何内容?您的表已分区,是否已添加分区?你说雅典娜解析了所有内容是什么意思?@Theo-Yes-select all至少在视觉上完美地返回了所有列/记录。我的第三个示例实际上只返回与一个字母匹配的记录。这一定是一个编码问题,但我不知道在哪里调整。我将文件存储为UTF8 Gzip格式。好的,我想我看到了问题所在,看到了我的答案。我很感谢您在这里的输入,并且您花时间深入研究了一下。这个问题是一个编码问题,但是。@BlackjacketMack-您是如何解决这个问题的,我的输入文件是UTF-16编码的
--nothing returned
Select *
From events
Where username = 'foo'


--nothing returned
Select *
From events
Where username LIKE ‘%foo%’


--records returned
Select *
From events
Where username LIKE ‘%f%’


--nothing returned
Select *
From events
Where username LIKE ‘f%’
using (MemoryStream memoryStream = new MemoryStream())
        using (StreamWriter streamWriter = new StreamWriter(memoryStream, Encoding.Unicode))
        {
            writeToStream(rows, streamWriter);

            bytes = compress(memoryStream);
        }
using (MemoryStream memoryStream = new MemoryStream())
        using (StreamWriter streamWriter = new StreamWriter(memoryStream, Encoding.UTF8))
        {
            writeToStream(rows, streamWriter);

            bytes = compress(memoryStream);
        }