john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

DynamoDBQuery

// 2013-02-13 johnpfeiffer
//TODO: handle UTF8?
package net.kittyandbear;

import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.TimeZone;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodb.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodb.model.AttributeValue;
import com.amazonaws.services.dynamodb.model.ComparisonOperator;
import com.amazonaws.services.dynamodb.model.Condition;
import com.amazonaws.services.dynamodb.model.Key;
import com.amazonaws.services.dynamodb.model.QueryRequest;
import com.amazonaws.services.dynamodb.model.QueryResult;

public class DynamoDBQuery {

    public static final String CLASSVERSION = "0.1";
    protected static final int MINIMUMPARAMETERS = 6;
    protected static final int MAXIMUMPARAMETERS = 6;
    public static final String CORRECTUSAGE = "java -jar DynamoDBQuery-" + DynamoDBQuery.CLASSVERSION + ".jar "
            + "accessKey secretKey tableName hashKey startTimeInUnixEpochSeconds endTimeInUnixEpochSeconds";


    private static String accessKey;
    private static String secretKey;
    private static String dynamoTableName;
    private static String hashKey;
    private static AmazonDynamoDBClient dynamoDB = null;

    private static void getEventsForKeyInTimeRange( String tableName, String hashKey, long timestampStart, long timestampEnd ) {

        Key lastKeyEvaluated = null;
        do {
            Condition rangeKeyCondition = new Condition().withComparisonOperator( ComparisonOperator.BETWEEN.toString() )
                    .withAttributeValueList( new AttributeValue().withN( String.valueOf( timestampStart ) ),
                            new AttributeValue().withN( String.valueOf( timestampEnd ) ) );

            QueryRequest queryRequest = new QueryRequest().withTableName( tableName )
                    .withHashKeyValue( new AttributeValue().withS( hashKey ) ).withRangeKeyCondition( rangeKeyCondition )
                    .withLimit( 100 ).withExclusiveStartKey( lastKeyEvaluated );

            QueryResult result = dynamoDB.query( queryRequest );
            for( Map<String, AttributeValue> item : result.getItems() ) {
                System.out.println( "----- ENTRY ---- ");
                System.out.println( item.toString() );
            }

            lastKeyEvaluated = result.getLastEvaluatedKey();
        } while( lastKeyEvaluated != null );
    }


    private static String timestampMillisecondsToDateString( long timestamp ) {
        SimpleDateFormat utcFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
        utcFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
        return utcFormat.format( timestamp ) + " UTC";
    }

    private static void connectToDynamoDB() throws Exception {
        AWSCredentials credentials = new BasicAWSCredentials( accessKey, secretKey );
        dynamoDB = new AmazonDynamoDBClient( credentials );
    }


    static public void main( String args[] ) throws Exception {
        if( argsAreInvalid( args ) ) {
            System.out.println( "ERROR: " + args.length + " Incorrect number of parameters, " + CORRECTUSAGE );
            System.exit( 1 );
        }


        for( int i = 0; i < args.length ; i++ )
        {
            System.out.println( args[i] );
        }

        accessKey = args[0];
        secretKey = args[1];
        dynamoTableName = args[2];
        hashKey = args[3];
        DynamoDBQuery.connectToDynamoDB();


        String timestampStartString = args[4 ];     // http://epochconverter.com for Human Date to Unix Epoch
        String timestampEndString = args[5 ];

        long timestampStartMilliseconds = Long.parseLong( timestampStartString ) * 1000;    //Java uses milliseconds
        long timestampEndMilliseconds = Long.parseLong( timestampEndString ) * 1000;

        long timestampStartMicroseconds = timestampStartMilliseconds * 1000;        //DynamoDB uses microseconds
        long timestampEndMicroseconds = timestampEndMilliseconds * 1000;


        System.out.println( "\nSearching " + dynamoTableName + " for " + hashKey +
                " between " + DynamoDBQuery.timestampMillisecondsToDateString( timestampStartMilliseconds ) + " and " + DynamoDBQuery.timestampMillisecondsToDateString( timestampEndMilliseconds ) );


        DynamoDBQuery.getEventsForKeyInTimeRange( dynamoTableName , hashKey, timestampStartMicroseconds , timestampEndMicroseconds );
        System.out.println( "done");

    }

    private static boolean argsAreInvalid( String args[] ) {
        boolean areInvalid = true;
        if( args != null && args.length >= MINIMUMPARAMETERS & args.length <= MAXIMUMPARAMETERS ) {
            areInvalid = false;
        }
        return areInvalid;
    }

} // end class

  • « DynamoDBQuery pom
  • Centos6 x64 tomcat6 ssl libapr native source iptables authbind »

Published

Feb 14, 2013

Category

java-classes

~306 words

Tags

  • classes 92
  • dynamodb 2
  • java 252