Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 类似于操作AWS lambda函数的运算符,但不是=_Sql_Amazon S3_Aws Lambda_Boto3_Aws Lex - Fatal编程技术网

Sql 类似于操作AWS lambda函数的运算符,但不是=

Sql 类似于操作AWS lambda函数的运算符,但不是=,sql,amazon-s3,aws-lambda,boto3,aws-lex,Sql,Amazon S3,Aws Lambda,Boto3,Aws Lex,我有一个小的csv文件,看起来像: is_employee,candidate_id,gender,hesa_type,university FALSE,b9bb80,Male,Mathematical sciences,Birmingham FALSE,8e552d,Female,Computer science,Swansea TRUE,2bc475,Male,Engineering & technology,Aston TRUE,c3ac8d,Female,Mathematical

我有一个小的csv文件,看起来像:

is_employee,candidate_id,gender,hesa_type,university
FALSE,b9bb80,Male,Mathematical sciences,Birmingham
FALSE,8e552d,Female,Computer science,Swansea
TRUE,2bc475,Male,Engineering & technology,Aston
TRUE,c3ac8d,Female,Mathematical sciences,Heriot-Watt
FALSE,ceb2fa,Female,Mathematical sciences,Imperial College London
以下lambda函数用于从s3bucket进行查询

import boto3
import os
import json

def lambda_handler(event, context):
    BUCKET_NAME = 'foo'
    KEY = 'bar/data.csv'  
    s3 = boto3.client('s3','eu-west-1')
    response = s3.select_object_content(
        Bucket = BUCKET_NAME,
        Key = KEY,
        ExpressionType = 'SQL',
        Expression = 'Select count(*) from s3object s where s.gender like \'%Female%\'',
        InputSerialization = {'CSV': {"FileHeaderInfo": "Use"}},
        OutputSerialization = {'JSON': {}},
    )

    for i in response['Payload']:
        if 'Records' in i:
            query_result = i['Records']['Payload'].decode('utf-8')

    print(list(json.loads(query_result).values())[0])
现在,当我得到
3
的结果时,这非常有效。
但由于某些原因,当将
like
运算符更改为
=
时,相同的代码不起作用,结果会下降到
0
,因此未找到匹配项。这里发生了什么事?

所以我发现了问题所在。问题是最后一列的项目后面有一个换行符,AWS S3解释器无法理解该换行符。所以实际上,大学的名字不是斯旺西,而是斯旺西


所以s.university=\'Swansea\'不起作用;然而,
s.university像“斯旺西%\”
确实有效,而且仍然是一个可搜索的表达式。

显示包含
=
的实际代码。您正在删除
%
字符吗?我同意,语法对于表达式来说是正确的(假设您只是将like替换为
=
)。您需要使用
=
表达式='Select count(*)从s3s对象中显示完整语句,其中s.gender=\'%Female%\'
返回为0。好的,所以@MarkB是正确的-我忘了删除
%
占位符,所以现在
=
适用于除最后一列之外的所有列:
Expression='Select count(*)from s3s对象,其中s.university-like\'%Swansea%\'
返回
1
-
Expression='Select count(*)从s3s对象,其中s.university=\'Swansea\'
返回
0
。除了最后一个专栏“大学”外,其他都很有效。