将 ScalarDB 与 DynamoDB 保留字用作列名时出现语法错误

问题描述

我想将 ScalarDB 与在 DynamoDB 中创建的名为 user 的架构一起使用。

例如,用户架构定义如下


df = spark.createDataFrame([{'ID':'A','Day':1},{'ID':'B',{'ID':'C','Day':2},{'ID':'D','Day':4}])

df1 = spark.createDataFrame([{'ID':'A','1':20,'2':10,'3':50,'4':30},'1':0,'2':50,'3':0,'4':50},'1':50,'3':10,'1':10,'2':25,'3':25,'4':40}
                            ])

df1=df1.withColumn('1',col('1').cast('int')).withColumn('2',col('2').cast('int')).withColumn('3',col('3').cast('int')).withColumn('4',col('4').cast('int'))

df=df.withColumn('Day',col('Day').cast('int'))
df_final = df.join(df1,'ID')

df_final_rdd = df_final.rdd

print(df_final_rdd.collect())

def create_list(r,s):
  s=str(s)
  k = (r['ID'],r['Day'],r[s])
  return k

l=[]
for element in df_final_rdd.collect():
  l.append(create_list(element,element['Day']))
  
rdd = sc.parallelize(l)
df= spark.createDataFrame(rdd).toDF('ID','Day','Percent')

我能够在 DynamoDB 中创建此用户架构。 但是,当我使用 ScalarDB 功能对此模式执行 CRUD 处理时,DynamoDB 返回语法违规错误,因为“状态”是保留字。

DynamoDB 的保留字总结在这里https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ReservedWords.html

在这种情况下,我想知道使用 ScalarDB 的工程师是否应该考虑到这个问题来定义他们的架构。 如果未来的改进能够在列名中使用特定于数据库的保留字并仍然使用 ScalarDB 功能,我会很高兴。

解决方法

此问题已在以下 PR 中修复:
https://github.com/scalar-labs/scalardb/pull/264

此修复将出现在下一个版本中:Scalar DB 3.2.0、3.1.1 和 3.0.2。