/* * Copyright 2012-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.services.dynamodbv2.document.Item; import com.amazonaws.services.dynamodbv2.document.ItemCollection; import com.amazonaws.services.dynamodbv2.document.QueryOutcome; import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec; import com.amazonaws.services.dynamodbv2.document.utils.ValueMap; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import com.amazonaws.services.dynamodbv2.model.PutItemRequest; import com.amazonaws.services.dynamodbv2.model.ScanRequest; import com.amazonaws.services.dynamodbv2.model.ScanResult; import com.amazonaws.services.dynamodbv2.util.Tables; /** * This sample demonstrates how to perform a few simple operations with the * Amazon DynamoDB service. */ public class NYSEScan { /* * Before running the code: Fill in your AWS access credentials in the * provided credentials file template, and be sure to move the file to the * default location (/Users/usdgadiraj/.aws/credentials) where the sample * code will load the credentials from. * https://console.aws.amazon.com/iam/home?#security_credential * * WARNING: To avoid accidental leakage of your credentials, DO NOT keep the * credentials file in your source directory. */ static AmazonDynamoDBClient dynamoDB; static DynamoDB dynamo; static NyseParser nyseParser = new NyseParser(); /** * The only information needed to create a client are security credentials * consisting of the AWS Access Key ID and Secret Access Key. All other * configuration, such as the service endpoints, are performed * automatically. Client parameters, such as proxies, can be specified in an * optional ClientConfiguration object when constructing a client. * * @see com.amazonaws.auth.BasicAWSCredentials * @see com.amazonaws.auth.ProfilesConfigFile * @see com.amazonaws.ClientConfiguration */ private static void init() throws Exception { /* * The ProfileCredentialsProvider will return your [default] credential * profile by reading from the credentials file located at * (/Users/usdgadiraj/.aws/credentials). */ AWSCredentials credentials = null; try { credentials = new ProfileCredentialsProvider("default").getCredentials(); } catch (Exception e) { throw new AmazonClientException("Cannot load the credentials from the credential profiles file. " + "Please make sure that your credentials file is at the correct " + "location (/Users/usdgadiraj/.aws/credentials), and is in valid format.", e); } dynamoDB = new AmazonDynamoDBClient(credentials); Region region = Region.getRegion(Regions.US_EAST_1); dynamoDB.setRegion(region); dynamoDB.setEndpoint("http://dynamo.itversity.com:8000"); dynamo = new DynamoDB(dynamoDB); } public static void main(String[] args) throws Exception { init(); String tableName = "stock_eod"; scan(tableName); } private static void scan(String tableName) { Table table = null; try { // Create table if it does not exist yet if (!Tables.doesTableExist(dynamoDB, tableName)) { System.out.println("Table " + tableName + " is does not exist"); } else { table = dynamo.getTable(tableName); } // select * from stock_eod where stockTicker = 'HCA' and v > 1000000; // http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>(); expressionAttributeValues.put(":val", new AttributeValue().withN("1000000")); //Below is not recommended as stockTicker is part of the key expressionAttributeValues.put(":st", new AttributeValue().withS("HCA")); ScanRequest scanRequest = new ScanRequest() .withTableName(tableName) .withFilterExpression("v > :val and stockTicker = :st") // select stockTicker, tradeDate, v from stock_eod where stockTicker = 'HCA' and v > 1000000; .withProjectionExpression("stockTicker,tradeDate,v") .withExpressionAttributeValues(expressionAttributeValues); ScanResult result = dynamoDB.scan(scanRequest); for (Map<String, AttributeValue> item : result.getItems()) { System.out.println(item); } } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means your request made it " + "to AWS, but was rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means the client encountered " + "a serious internal problem while trying to communicate with AWS, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } private static Map<String, AttributeValue> newItem(NyseParser nyseParser) { Map<String, AttributeValue> item = new HashMap<String, AttributeValue>(); item.put("stockTicker", new AttributeValue(nyseParser.getStockTicker())); item.put("tradeDate", new AttributeValue(nyseParser.getTransactionDate())); item.put("lp", new AttributeValue().withN(Float.toString(nyseParser.getLowPrice()))); item.put("op", new AttributeValue().withN(Float.toString(nyseParser.getOpenPrice()))); item.put("cp", new AttributeValue().withN(Float.toString(nyseParser.getClosePrice()))); item.put("hp", new AttributeValue().withN(Float.toString(nyseParser.getHighPrice()))); item.put("v", new AttributeValue().withN(Float.toString(nyseParser.getVolume()))); return item; } }