DynamoDB.SQL 2.0.0 is out!

Hi every­one, hap­py new year!

I was real­ly glad to find a cou­ple of days to work on some of my open source projects and put togeth­er a new ver­sion of DynamoDB.SQL which brings it inline with the lat­est ver­sion of the .Net AWSSDK amongst oth­er things. You can down­load and install it from Nuget here.


Breaking Changes

There are two break­ing changes:

  1. DynamoDB v1 is no longer sup­port­ed as they have been dep­re­cat­ed from the AWSSDK, which means the v1 syn­tax (which uses the spe­cial key­words @hashkey and @rangekey to refer to the table’s hash and range keys) is also dep­re­cat­ed and you should use the v2 syn­tax going for­ward.
  2. The clum­sy and frankly unnec­es­sary DynamoDbV2.SQL.Execution name­space is gone! Instead, the exten­sion meth­ods for Ama­zon­Dy­namoD­B­Client and DynamoD­B­Con­text now exist in the same name­spaces so you no longer have to import anoth­er name­space just to use the exten­sion meth­ods.


Bug Fixes

Select­ing spe­cif­ic attrib­ut­es in a Scan now works, please see respec­tive C# and F# exam­ples.

The old Invalid­Query and Invalid­Scan excep­tions (which didn’t play so well with C# since the error mes­sage was not very use­ful at all) have been replaced with C# friend­ly Invalid­QueryEx­cep­tion and Invalid­ScanEx­cep­tion types expos­es the under­ly­ing pars­ing errors in the error mes­sages.


Global Secondary Index

AWS announced Glob­al Sec­ondary Index sup­port on Decem­ber 12th, 2013, and it’s sup­port­ed in DynamoDB.SQL via the exist­ing INDEX query option, for exam­ple:


How­ev­er, glob­al index­es work very dif­fer­ent­ly to local sec­ondary index­es, for starters they require their own through­put rather than use the exist­ing through­put for the table (for more details refer to its doc­u­men­ta­tion).

Also, it does not sup­port con­sis­tent reads, so when query­ing against the index you must add the NoCon­sis­ten­tRead option in your query oth­er­wise you’ll receive an error from the DynamoDB ser­vice.

Last­ly, when you cre­ate the glob­al sec­ondary index you have to choose which attrib­ut­es are pro­ject­ed into the index and unlike local sec­ondary index, attrib­ut­es that have not been pro­ject­ed into the index will not be retrieved from the table at extra read units cost, you will receive an error from the ser­vice instead. Please refer to the guide­lines page for Glob­al Sec­ondary Index.



I’ve also revamped the README doc­u­ment to make it more detailed and use­ful and added a bunch more exam­ples for both C# and F#, hope you like the new lay­out.