├── .aws └── config ├── .gitignore ├── README.md ├── course-lessons-project ├── project1-iot-store-data │ ├── README.md │ ├── device_script.py │ ├── requirements.txt │ └── seattle-weather.csv ├── project2-order-management-system │ ├── README.md │ ├── dev-requirements.txt │ ├── lambda_function.py │ ├── orders.py │ └── prod-requirements.txt ├── project3-spark-emr-referral-data │ ├── README.md │ ├── advertisers.py │ └── data.csv ├── project4-redshift-data-analysis │ └── README.md └── project5-js-visualizations │ ├── README.md │ ├── top-ten-highcharts.html │ └── top-ten.html ├── data ├── README.txt ├── apache.log └── movie_metadata.csv ├── dms ├── mysql-privs.sql ├── sakila-data.sql └── sakila-schema.sql ├── dynamodb-lab ├── dynamodb.py └── moviedata.json ├── es-lab └── firehose-delivery.py └── kinesis-lab ├── firehose-agent.json ├── firehose-and-streams-agent.json ├── firehose-transform-agent.json ├── read-kinesis-stream.py └── write-to-kinesis-firehose.py /.aws/config: -------------------------------------------------------------------------------- 1 | [default] 2 | region = us-east-1 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | .DS_Store 3 | __pycache__ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # content-aws-bigdata-cert -------------------------------------------------------------------------------- /course-lessons-project/project1-iot-store-data/README.md: -------------------------------------------------------------------------------- 1 | # IoT Data Project 2 | 3 | ## Creating Things, Certificates, and Policies 4 | 5 | 1. IoT --> Manage --> Show me later --> Register a thing --> Create a single thing 6 | 2. Create a thing called `store-sensor-seattle1` 7 | Name it `store-sensor-seattle1` 8 | 9 | Type --> Add a new type 10 | Name - `sensor` 11 | Description - A sensor 12 | 13 | Group 14 | Name --> Seattle 15 | Description --> Things in Seattle 16 | Attributes --> (city | Seattle) 17 | 18 | 3. Create a certificate for the thing 19 | Certificate for the thing 20 | One-click certificate 21 | Download everything 22 | Download the first AWS certificate (not the symmatech one) 23 | 24 | 4. Create a policy for the thing and attach it to the certificate 25 | Policy for the thing 26 | Main IoT page > Secure > Policies > Create a policy 27 | Name - sensor-policy 28 | Action - iot:* 29 | Resource ARN - * 30 | NOTE VERY PERMISSIVE DON'T DO IN PRODUCTION 31 | Check "Allow" 32 | Press create 33 | Attach Policy on the certificate we created 34 | Back to Secure > Certificates > attach policy 35 | 36 | ## Test subscribing and publishing to an IoT topic 37 | 38 | 1. Subscribe and publish to a topic 39 | IoT Core > Test 40 | Subscribe to a new topic `SeattleStoreTemp/1` 41 | Publish to it with the basic message 42 | 43 | 2. Setup a Python virtual environment for the IoT Script 44 | 45 | ```bash 46 | python3 -m venv venv 47 | source venv/bin/activate 48 | pip install AWSIoTPythonSDK 49 | ``` 50 | 51 | From inside the Python interpreter Check that the OpenSSL version is 1.0.1 or greater 52 | ```python 53 | import ssl 54 | ssl.OPENSSL_VERSION 55 | ``` 56 | 57 | 3. Publish to the same topic with the python script 58 | Edit the script (device_script.py) 59 | Change the BROKER_PATH 60 | Change the Root CA, Private Key and Certificate paths 61 | Use the script to publish to the topic and see it publish live in the browser 62 | 63 | ## Create a Rule to Process the Data 64 | Name - sensor_rule 65 | Attributes - * 66 | OR Attributes - timestamp, temperature 67 | Topic Filter - SeattleStoreTemp/1 68 | Condition - wont use right now because we want all the data 69 | Add action 70 | Review integrations 71 | Send message to Amazon Kinesis Firehose 72 | Going to have to pause here and create a firehose 73 | 74 | 75 | ## Creating a Firehose Delivery Stream for our IoT Rule 76 | Either Kinesis --> Firehose OR 77 | "Create new Resource" on the Configure Action stuff in IoT 78 | Create Stream 79 | Stream Name - weather-data-stream 80 | Direct Put 81 | Process records 82 | Transform with Lambda - Off 83 | Transform Records for Glue - Off 84 | Destination 85 | Amazon S3 86 | New S3 Bucket - la-big-data-seattle-weather-2018 87 | Settings 88 | Buffer conditions 89 | 5MB 90 | 300 seconds is fine 91 | Compression & Encryption options - off 92 | Error logging - Disabled 93 | IAM Role - Create a new one and take alook at it 94 | Review and create 95 | 96 | ## Finish up our IoT Rule 97 | Select the new stream name 98 | Separator - Newline 99 | Create a new role - iot-weather-data-role 100 | Select the role - iot-weather-data-role 101 | Add action 102 | Create the rule 103 | 104 | ## Testing our new IoT Rule 105 | Start the device_script.py again 106 | Check Firehose monitoring 107 | Check S3 for the actual data 108 | Note we could have delivered it directly with IoT 109 | Can modify it with Firehose 110 | 111 | 112 | ## Kinesis Analytics Streams 113 | 114 | ```sql 115 | CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( 116 | max_temp REAL, 117 | min_temp REAL 118 | ); 119 | 120 | CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" 121 | SELECT STREAM 122 | MAX("max_temperature") as max_temp, 123 | MIN("min_temperature") as min_temp 124 | FROM "SOURCE_SQL_STREAM_001" 125 | GROUP BY 126 | FLOOR(("SOURCE_SQL_STREAM_001".ROWTIME - TIMESTAMP '1970-01-01 00:00:00') SECOND / 10 TO SECOND); 127 | ``` 128 | -------------------------------------------------------------------------------- /course-lessons-project/project1-iot-store-data/device_script.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import random 3 | import json 4 | import time 5 | 6 | from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient 7 | from time import sleep 8 | from datetime import date, datetime 9 | 10 | 11 | CLIENT_NAME = "store-thermometer-seattle1" 12 | TOPIC = "SeattleStoreTemp/1" 13 | 14 | # Broker path is under AWS IoT > Settings (at the bottom left) 15 | BROKER_PATH = "a2hyr29arhu1ac-ats.iot.us-east-1.amazonaws.com" 16 | 17 | # RSA 2048 bit key: Amazon Root CA 1 found here: 18 | # https://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html 19 | ROOT_CA_PATH = './AmazonRootCA1.pem' 20 | PRIVATE_KEY_PATH = './14e764a6a2-private.pem.key' 21 | CERTIFICATE_PATH = './14e764a6a2-certificate.pem.crt' 22 | 23 | IoTclient = AWSIoTMQTTClient(CLIENT_NAME) 24 | IoTclient.configureEndpoint(BROKER_PATH, 8883) 25 | IoTclient.configureCredentials( 26 | ROOT_CA_PATH, 27 | PRIVATE_KEY_PATH, 28 | CERTIFICATE_PATH 29 | ) 30 | 31 | # Allow the device to queue infinite messages 32 | IoTclient.configureOfflinePublishQueueing(-1) 33 | 34 | # Number of messages to send after a connection returns 35 | IoTclient.configureDrainingFrequency(2) # 2 requests/second 36 | 37 | # How long to wait for a [dis]connection to complete (in seconds) 38 | IoTclient.configureConnectDisconnectTimeout(10) 39 | 40 | # How long to wait for publish/[un]subscribe (in seconds) 41 | IoTclient.configureMQTTOperationTimeout(5) 42 | 43 | 44 | IoTclient.connect() 45 | IoTclient.publish(TOPIC, "connected", 0) 46 | 47 | with open('seattle-weather.csv', newline='') as csvfile: 48 | csv.reader(csvfile, delimiter=',', quotechar='"') 49 | next(csvfile) 50 | for row in csvfile: 51 | time.sleep(2) 52 | data = row.split(',') 53 | i=0 54 | while i < len(data): 55 | data[i]=data[i].replace('"','') 56 | data[i]=data[i].replace('\n','') 57 | i=i+1 58 | payload = json.dumps({ 59 | "station": data[0], 60 | "name": data[1] + ',' + data[2], 61 | "latitude": data[3], 62 | "longitude": data[4], 63 | "elevation": data[5], 64 | "date_measured": data[6], 65 | "precipitation": data[7], 66 | "snowfall": data[8], 67 | "snow_depth": data[9], 68 | "average_temperature": data[10], 69 | "max_temperature": data[11], 70 | "min_temperature": data[12] 71 | }) 72 | IoTclient.publish(TOPIC, payload, 0) 73 | -------------------------------------------------------------------------------- /course-lessons-project/project1-iot-store-data/requirements.txt: -------------------------------------------------------------------------------- 1 | AWSIoTPythonSDK==1.4.0 -------------------------------------------------------------------------------- /course-lessons-project/project1-iot-store-data/seattle-weather.csv: -------------------------------------------------------------------------------- 1 | "STATION","NAME","LATITUDE","LONGITUDE","ELEVATION","DATE","PRCP","SNOW","SNWD","TAVG","TMAX","TMIN" 2 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-01","0.00","0.0","0.0","36","44","31" 3 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-02","0.00","0.0","0.0","37","44","34" 4 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-03","0.00","0.0","0.0","39","49","33" 5 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-04","0.13","0.0","0.0","41","47","35" 6 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-05","0.51","0.0","0.0","46","51","45" 7 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-06","0.17","0.0","0.0","47","48","42" 8 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-07","0.33","0.0","0.0","44","45","41" 9 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-08","0.16","0.0","0.0","45","49","43" 10 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-09","0.18","0.0","0.0","45","50","43" 11 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-10","0.17","0.0","0.0","43","45","41" 12 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-11","1.12","0.0","0.0","44","50","42" 13 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-12","0.10","0.0","0.0","50","51","48" 14 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-13","0.01","0.0","0.0","50","58","45" 15 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-14","0.00","0.0","0.0","47","56","40" 16 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-15","0.06","0.0","0.0","48","64","41" 17 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-16","0.19","0.0","0.0","52","56","44" 18 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-17","0.43","0.0","0.0","49","56","45" 19 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-18","0.40","0.0","0.0","48","52","39" 20 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-19","0.03","0.0","0.0","42","46","38" 21 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-20","0.08","0.0","0.0","43","49","39" 22 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-21","0.11","0.0","0.0","48","51","39" 23 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-22","0.36","0.0","0.0","43","47","40" 24 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-23","0.88","0.0","0.0","42","48","40" 25 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-24","0.44","0.0","0.0","46","49","41" 26 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-25","0.15","0.0","0.0","41","44","37" 27 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-26","0.41","0.0","0.0","40","42","38" 28 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-27","0.55","0.0","0.0","43","48","41" 29 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-28","0.06","0.0","0.0","47","57","43" 30 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-29","1.09","0.0","0.0","49","52","43" 31 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-30","0.00","0.0","0.0","44","47","39" 32 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-01-31","0.00","0.0","0.0","42","45","39" 33 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-01","0.57","0.0","0.0","44","46","43" 34 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-02","0.08","0.0","0.0","48","53","45" 35 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-03","0.14","0.0","0.0","49","51","48" 36 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-04","0.01","0.0","0.0","51","55","49" 37 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-05","0.03","0.0","0.0","49","50","46" 38 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-06","0.05","0.0","0.0","46","48","44" 39 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-07","0.00","0.0","0.0","49","54","47" 40 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-08","0.05","0.0","0.0","51","53","42" 41 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-09","0.00","0.0","0.0","44","49","39" 42 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-10","0.00","0.0","0.0","40","46","33" 43 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-11","0.00","0.0","0.0","39","46","33" 44 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-12","0.00","0.0","0.0","39","47","32" 45 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-13","0.14","0.0","0.0","37","48","29" 46 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-14","0.10","0.0","0.0","40","44","37" 47 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-15","0.01","0.0","0.0","40","45","36" 48 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-16","0.11","0.0","0.0","42","47","40" 49 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-17","0.30","0.0","0.0","46","49","39" 50 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-18","0.06","0.0","0.0","38","39","30" 51 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-19","0.00","0.0","0.0","32","37","28" 52 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-20","0.00","0.0","0.0","31","36","27" 53 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-21","0.06","1.0","0.0","31","34","26" 54 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-22","0.00","0.0","1.2","31","38","26" 55 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-23","0.03","0.0","0.0","30","40","24" 56 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-24","0.06","0.0","0.0","37","45","36" 57 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-25","0.20","0.0","0.0","42","43","35" 58 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-26","0.00","0.0","0.0","37","45","32" 59 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-27","0.01","0.0","0.0","40","47","37" 60 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-02-28","0.15","0.0","0.0","42","47","39" 61 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-01","0.03","0.0","0.0","44","51","37" 62 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-02","0.18","0.0","0.0","42","45","37" 63 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-03","0.00","0.0","0.0","41","52","34" 64 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-04","0.13","0.0","0.0","40","48","33" 65 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-05","0.00","0.0","0.0","41","47","39" 66 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-06","0.00","0.0","0.0","44","53","37" 67 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-07","0.04","0.0","0.0","43","50","35" 68 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-08","0.35","0.0","0.0","45","52","39" 69 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-09","0.00","0.0","0.0","46","52","40" 70 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-10","0.00","0.0","0.0","44","59","34" 71 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-11","0.00","0.0","0.0","51","64","39" 72 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-12","0.00","0.0","0.0","57","73","42" 73 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-13","0.27","0.0","0.0","60","64","44" 74 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-14","0.03","0.0","0.0","47","53","40" 75 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-15","0.00","0.0","0.0","45","56","35" 76 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-16","0.00","0.0","0.0","47","58","39" 77 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-17","0.00","0.0","0.0","46","54","38" 78 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-18","0.00","0.0","0.0","46","55","39" 79 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-19","0.00","0.0","0.0","45","55","37" 80 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-20","0.00","0.0","0.0","46","56","36" 81 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-21","0.10","0.0","0.0","46","58","36" 82 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-22","0.46","0.0","0.0","47","49","39" 83 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-23","0.35","0.0","0.0","41","49","34" 84 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-24","0.23","0.0","0.0","41","47","34" 85 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-25","0.04","0.0","0.0","43","52","37" 86 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-26","0.15","0.0","0.0","44","46","40" 87 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-27","0.08","0.0","0.0","47","52","45" 88 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-28","0.00","0.0","0.0","47","54","44" 89 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-29","0.00","0.0","0.0","48","55","43" 90 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-30","0.00","0.0","0.0","50","57","46" 91 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-03-31","0.00","0.0","0.0","50","59","45" 92 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-01","0.00","0.0","0.0","47","50","38" 93 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-02","0.00","0.0","0.0","43","53","36" 94 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-03","0.00","0.0","0.0","45","50","39" 95 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-04","0.29","0.0","0.0","45","50","41" 96 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-05","0.21","0.0","0.0","49","56","46" 97 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-06","0.05","0.0","0.0","54","65","49" 98 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-07","0.82","0.0","0.0","57","62","46" 99 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-08","0.39","0.0","0.0","48","51","46" 100 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-09","0.00","0.0","0.0","50","62","44" 101 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-10","0.18","0.0","0.0","54","60","46" 102 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-11","0.21","0.0","0.0","51","54","42" 103 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-12","0.11","0.0","0.0","45","51","41" 104 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-13","0.66","0.0","0.0","47","53","43" 105 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-14","1.70","0.0","0.0","49","53","45" 106 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-15","0.12","0.0","0.0","47","51","43" 107 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-16","0.59","0.0","0.0","45","47","41" 108 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-17","0.01","0.0","0.0","46","53","42" 109 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-18","0.00","0.0","0.0","48","60","41" 110 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-19","0.00","0.0","0.0","51","62","41" 111 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-20","0.00","0.0","0.0","53","63","43" 112 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-21","0.03","0.0","0.0","51","56","45" 113 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-22","0.00","0.0","0.0","50","59","44" 114 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-23","0.00","0.0","0.0","53","69","41" 115 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-24","0.00","0.0","0.0","63","77","49" 116 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-25","0.00","0.0","0.0","63","75","51" 117 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-26","0.00","0.0","0.0","65","82","51" 118 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-27","0.01","0.0","0.0","58","58","49" 119 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-28","0.31","0.0","0.0","51","55","47" 120 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-29","0.00","0.0","0.0","52","61","46" 121 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-04-30","0.00","0.0","0.0","51","59","47" 122 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-01","0.00","0.0","0.0","52","62","48" 123 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-02","0.00","0.0","0.0","55","70","45" 124 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-03","0.00","0.0","0.0","61","74","50" 125 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-04","0.00","0.0","0.0","56","64","50" 126 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-05","0.01","0.0","0.0","57","68","48" 127 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-06","0.00","0.0","0.0","62","77","52" 128 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-07","0.00","0.0","0.0","58","69","53" 129 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-08","0.03","0.0","0.0","62","75","50" 130 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-09","0.00","0.0","0.0","60","67","52" 131 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-10","0.04","0.0","0.0","55","62","50" 132 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-11","0.00","0.0","0.0","54","67","50" 133 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-12","0.00","0.0","0.0","60","77","49" 134 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-13","0.00","0.0","0.0","67","85","52" 135 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-14","0.00","0.0","0.0","71","88","58" 136 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-15","0.00","0.0","0.0","65","69","54" 137 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-16","0.00","0.0","0.0","59","68","53" 138 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-17","0.00","0.0","0.0","58","67","53" 139 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-18","0.00","0.0","0.0","58","66","53" 140 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-19","0.04","0.0","0.0","60","72","45" 141 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-20","0.00","0.0","0.0","60","68","55" 142 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-21","0.00","0.0","0.0","60","72","54" 143 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-22","0.00","0.0","0.0","63","79","51" 144 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-23","0.00","0.0","0.0","68","80","55" 145 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-24","0.00","0.0","0.0","62","70","54" 146 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-25","0.00","0.0","0.0","60","68","52" 147 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-26","0.00","0.0","0.0","59","68","52" 148 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-27","0.00","0.0","0.0","60","75","51" 149 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-28","0.00","0.0","0.0","61","70","52" 150 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-29","0.00","0.0","0.0","58","65","50" 151 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-30","0.00","0.0","0.0","56","67","48" 152 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-05-31","0.00","0.0","0.0","56","67","49" 153 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-01","0.00","0.0","0.0","56","68","48" 154 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-02","0.00","0.0","0.0","62","77","54" 155 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-03","0.01","0.0","0.0","61","63","53" 156 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-04","0.00","0.0","0.0","55","69","49" 157 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-05","0.00","0.0","0.0","58","69","49" 158 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-06","0.00","0.0","0.0",,"75","51" 159 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-07","0.00","0.0","0.0",,"68","55" 160 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-08","0.25","0.0","0.0",,"64","52" 161 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-09","0.09","0.0","0.0",,"63","49" 162 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-10","0.06","0.0","0.0",,"62","48" 163 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-11","0.00","0.0","0.0",,"68","48" 164 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-12","0.00","0.0","0.0",,"69","48" 165 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-13","0.02","0.0","0.0",,"67","53" 166 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-14","0.00","0.0","0.0",,"68","53" 167 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-15","0.00","0.0","0.0",,"73","53" 168 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-16","0.00","0.0","0.0",,"78","54" 169 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-17","0.00","0.0","0.0",,"88","58" 170 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-18","0.00","0.0","0.0",,"87","60" 171 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-19","0.00","0.0","0.0",,"85","57" 172 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-20","0.00","0.0","0.0",,"88","59" 173 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-21","0.00","0.0","0.0",,"69","58" 174 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-22","0.00","0.0","0.0",,"69","57" 175 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-23","0.07","0.0","0.0",,"72","56" 176 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-24","0.13","0.0","0.0",,"79","54" 177 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-25","0.00","0.0","0.0",,"71","55" 178 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-26","0.00","0.0","0.0",,"73","53" 179 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-27","0.00","0.0","0.0",,"67","54" 180 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-28","0.00","0.0","0.0",,"69","53" 181 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-29","0.00","0.0","0.0",,"72","55" 182 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-06-30","0.00","0.0","0.0",,"66","56" 183 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-01","0.04","0.0","0.0",,"71","56" 184 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-02","0.00","0.0","0.0",,"70","53" 185 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-03","0.00","0.0","0.0",,"76","50" 186 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-04","0.00","0.0","0.0",,"83","57" 187 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-05","0.00","0.0","0.0",,"85","59" 188 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-06","0.00","0.0","0.0",,"78","60" 189 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-07","0.01","0.0","0.0",,"74","58" 190 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-08","0.00","0.0","0.0",,"81","58" 191 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-09","0.00","0.0","0.0",,"72","57" 192 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-10","0.00","0.0","0.0",,"78","58" 193 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-11","0.00","0.0","0.0",,"82","59" 194 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-12","0.00","0.0","0.0",,"89","59" 195 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-13","0.00","0.0","0.0",,"85","61" 196 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-14","0.00","0.0","0.0",,"87","58" 197 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-15","0.00","0.0","0.0",,"93","63" 198 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-16","0.00","0.0","0.0",,"92","63" 199 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-17","0.00","0.0","0.0",,"85","60" 200 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-18","0.00","0.0","0.0",,"77","58" 201 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-19","0.00","0.0","0.0",,"70","54" 202 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-20","0.00","0.0","0.0",,"74","55" 203 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-21","0.00","0.0","0.0",,"79","56" 204 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-22","0.00","0.0","0.0",,"86","61" 205 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-23","0.00","0.0","0.0",,"90","63" 206 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-24","0.00","0.0","0.0",,"91","59" 207 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-25","0.00","0.0","0.0",,"92","62" 208 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-26","0.00","0.0","0.0",,"92","60" 209 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-27","0.00","0.0","0.0",,"88","57" 210 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-28","0.00","0.0","0.0",,"85","58" 211 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-29","0.00","0.0","0.0",,"94","60" 212 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-30","0.00","0.0","0.0",,"89","62" 213 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-07-31","0.00","0.0","0.0",,"80","60" 214 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-01","0.00","0.0","0.0",,"75","59" 215 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-02","0.02","0.0","0.0",,"70","58" 216 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-03","0.01","0.0","0.0",,"76","59" 217 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-04","0.00","0.0","0.0",,"81","58" 218 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-05","0.00","0.0","0.0",,"86","59" 219 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-06","0.00","0.0","0.0",,"89","59" 220 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-07","0.00","0.0","0.0",,"92","60" 221 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-08","0.00","0.0","0.0",,"94","62" 222 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-09","0.00","0.0","0.0",,"93","60" 223 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-10","0.00","0.0","0.0",,"82","62" 224 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-11","0.05","0.0","0.0",,"72","62" 225 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-12","0.00","0.0","0.0",,"73","59" 226 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-13","0.00","0.0","0.0",,"79","59" 227 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-14","0.00","0.0","0.0",,"85","62" 228 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-15","0.00","0.0","0.0",,"86","61" 229 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-16","0.00","0.0","0.0",,"73","58" 230 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-17","0.00","0.0","0.0",,"74","54" 231 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-18","0.00","0.0","0.0",,"81","55" 232 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-19","0.00","0.0","0.0",,"80","58" 233 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-20","0.00","0.0","0.0",,"81","57" 234 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-21","0.00","0.0","0.0",,"91","65" 235 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-22","0.00","0.0","0.0",,"89","59" 236 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-23","0.01","0.0","0.0",,"73","57" 237 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-24","0.00","0.0","0.0",,"69","56" 238 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-25","0.00","0.0","0.0",,"64","53" 239 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-26","0.11","0.0","0.0",,"65","57" 240 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-27","0.00","0.0","0.0",,"76","56" 241 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-28","0.00","0.0","0.0","67","84","55" 242 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-29","0.00","0.0","0.0","68","77","57" 243 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-30","0.00","0.0","0.0","66","73","60" 244 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-08-31","0.00","0.0","0.0","64","69","58" 245 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-01","0.00","0.0","0.0","63","73","57" 246 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-02","0.00","0.0","0.0","63","76","52" 247 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-03","0.00","0.0","0.0","66","74","58" 248 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-04","0.00","0.0","0.0","64","77","55" 249 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-05","0.00","0.0","0.0","67","82","57" 250 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-06","0.00","0.0","0.0","69","85","56" 251 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-07","0.05","0.0","0.0","65","75","56" 252 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-08","0.04","0.0","0.0","62","71","58" 253 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-09","0.13","0.0","0.0","65","75","57" 254 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-10","0.00","0.0","0.0","63","68","58" 255 | "USW00024233","SEATTLE TACOMA INTERNATIONAL AIRPORT, WA US","47.4444","-122.3138","112.8","2018-09-11","0.00","0.0","0.0","61","67","56" 256 | -------------------------------------------------------------------------------- /course-lessons-project/project2-order-management-system/README.md: -------------------------------------------------------------------------------- 1 | # Creating an Orders System 2 | 3 | ## Create the DynamoDB Table 4 | 5 | 1. Navigate to the DynamoDB portion of the AWS Console 6 | 2. Create a Table `PenguinOrders` 7 | - Pick Partition Key (`order_id`) and optional sort key (`item_id`) 8 | - Uncheck use defaults 9 | - Mention LSI/GSI (You can look at the CDA and Labs for this) 10 | - Set read/write capacity (Manually to 5 units each) 11 | - Consider AutoScaling/Encryption but not in this case 12 | - Create table 13 | 14 | ## Setting up the Script to Send in Data 15 | 1. Install dependencies and setup Python environment 16 | ```bash 17 | python3 -m venv venv 18 | source venv/bin/activate 19 | pip install -r requirements.txt 20 | ``` 21 | 2. Make sure the table name is correct 22 | 3. Check that the credentials are correct with `aws dynamodb list-tables` to check that the table is there. 23 | 4. Run the script `python orders.py` OR `import orders` and `orders.write_orders()` 24 | 5. Pause it after a few entries and check that it works 25 | ```bash 26 | aws dynamodbstreams list-streams 27 | aws dynamodbstreams describe-stream --stream-arn STREAM_ARN 28 | # with most recent shard id: 29 | aws dynamodbstreams get-shard-iterator --stream-arn STREAM_ARN --shard-id SHARD_ID --shard-iterator-type LATEST 30 | # Use initial shard iterator, show nothing there, 31 | # then add records and use the next shard iterator 32 | aws dynamodbstreams get-records --shard-iterator "QUOTED_SHARD_ITERATOR" 33 | ``` 34 | 6. Move on to creating the Lambda Function and ElasticSearch Cluster 35 | 36 | ## Creating the Lambda Function 37 | 1. Build the function package with 38 | ```bash 39 | mkdir build && cd build 40 | pip install -r ../prod-requirements.txt -t . 41 | cp ../lambda_function.py . 42 | zip -r ../package.zip ./* 43 | cd .. 44 | rm -r build 45 | mv ./package.zip ~/Desktop 46 | ``` 47 | 2. Deploy the `package.zip` file in the AWS Console 48 | 3. Set a role for it that has permissions we need later 49 | Role: 50 | ```json 51 | { 52 | "Version": "2012-10-17", 53 | "Statement": [ 54 | { 55 | "Effect": "Allow", 56 | "Action": [ 57 | "es:ESHttpPost", 58 | "es:ESHttpPut", 59 | "dynamodb:DescribeStream", 60 | "dynamodb:GetRecords", 61 | "dynamodb:GetShardIterator", 62 | "dynamodb:ListStreams", 63 | "logs:CreateLogGroup", 64 | "logs:CreateLogStream", 65 | "logs:PutLogEvents" 66 | ], 67 | "Resource": "*" 68 | } 69 | ] 70 | } 71 | ``` 72 | And trust relationship: 73 | ```json 74 | { 75 | "Version": "2012-10-17", 76 | "Statement": [ 77 | { 78 | "Effect": "Allow", 79 | "Principal": { 80 | "Service": "lambda.amazonaws.com" 81 | }, 82 | "Action": "sts:AssumeRole" 83 | } 84 | ] 85 | } 86 | ``` 87 | 4. Setup a trigger with DynamoDB streams using LATEST 88 | 5. Test it by briefly starting the script up again and seeing the function run and print to logs 89 | 90 | ## Creating the ElasticSearch Cluster 91 | 1. Create a cluster in ElasticSearch 92 | Name - `penguinorders` 93 | ES Version - 6.3 94 | Size - `t2.small.elasticsearch` 95 | Role - Open with IAM restrictions to the account and my IP? 96 | 2. Revisit the Role for the Lambda Function 97 | 3. Create an index in Kibana - `PUT orders` in the Dev Tools 98 | 4. Update the endpoint in the Lambda Function code 99 | 4. Test sending in data with the Lambda function by running the script again breifly 100 | 101 | ## Running and Testing Our Entire Order System 102 | 1. Run the script again and monitor the different areas you should see data moving through 103 | 2. DynamoDB - New Items 104 | 3. Lambda - Function Executions 105 | 4. ElasticSearch - New Indexed Documents 106 | 5. Leave the script running for 10ish min so that it can generate enough data for the data pipeline 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /course-lessons-project/project2-order-management-system/dev-requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.9.13 2 | botocore==1.12.13 3 | certifi==2018.8.24 4 | chardet==3.0.4 5 | docutils==0.14 6 | elasticsearch==6.3.1 7 | Faker==0.9.0 8 | idna==2.7 9 | jmespath==0.9.3 10 | python-dateutil==2.7.3 11 | requests==2.19.1 12 | requests-aws4auth==0.9 13 | s3transfer==0.1.13 14 | six==1.11.0 15 | text-unidecode==1.2 16 | urllib3==1.23 17 | -------------------------------------------------------------------------------- /course-lessons-project/project2-order-management-system/lambda_function.py: -------------------------------------------------------------------------------- 1 | import json 2 | import boto3 3 | import time 4 | from elasticsearch import Elasticsearch, RequestsHttpConnection 5 | from requests_aws4auth import AWS4Auth 6 | 7 | s3 = boto3.client('s3') 8 | sts = boto3.client('sts') 9 | 10 | ES_URL = "search-iaohsdayfsdghv-asidurftas6i7r3fteyasd.us-east-1.es.amazonaws.com" 11 | credentials = boto3.Session().get_credentials() 12 | 13 | awsauth = AWS4Auth( 14 | credentials.access_key, 15 | credentials.secret_key, 16 | 'us-east-1', 17 | 'es', 18 | session_token=credentials.token 19 | ) 20 | 21 | es_client = Elasticsearch( 22 | hosts=[{'host': ES_URL, 'port': 443}], 23 | http_auth=awsauth, 24 | use_ssl=True, 25 | verify_certs=True, 26 | connection_class=RequestsHttpConnection 27 | ) 28 | 29 | def record_order(doc): 30 | """Post an order to the ES Cluster index""" 31 | es_client.index( 32 | index="orders", 33 | doc_type="order", 34 | body=doc 35 | ) 36 | 37 | def lambda_handler(event, context): 38 | for record in event['Records']: 39 | es_doc = {} 40 | print(event) 41 | if record['eventName'] == 'INSERT': 42 | es_doc['item_id'] = record['dynamodb']['NewImage']['item_id']['S'] 43 | es_doc['item_name'] = record['dynamodb']['NewImage']['item_name']['S'] 44 | es_doc['item_total'] = record['dynamodb']['NewImage']['item_total']['S'] 45 | es_doc['customer_name'] = record['dynamodb']['NewImage']['customer_name']['S'] 46 | if ES_URL == "": 47 | print('Empty string') 48 | print(es_doc) 49 | else: 50 | print('elseing it up') 51 | print(es_doc) 52 | record_order(json.dumps(es_doc)) 53 | time.sleep(1) 54 | else: 55 | pass 56 | -------------------------------------------------------------------------------- /course-lessons-project/project2-order-management-system/orders.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | import uuid 3 | import random 4 | import time 5 | 6 | from faker import Faker 7 | 8 | dynamodb = boto3.resource('dynamodb') 9 | table = dynamodb.Table('PenguinOrders') 10 | fake = Faker() 11 | 12 | # NO ANIMIALS WERE HARMED CREATING THIS CLOTHING 13 | manufacturers = [ 14 | ['PenguinPolar', 1.8], 15 | ['Glacier', 1.3], 16 | ['Iceeeey', 0.6], 17 | ['Artic', 0.89], 18 | ['S-PoleStyle', 0.7], 19 | ['Terran', 0.8], 20 | ['IceShelf', 1.0], 21 | ['Husky', 1.1], 22 | ] 23 | 24 | items = [ 25 | ['Sled', 70], 26 | ['Parka', 20], 27 | ['Crampon', 135], 28 | ['Carabiner', 3], 29 | ['Snowshoes', 235], 30 | ['Sunglasses', 30], 31 | ['Ice Pick', 85], 32 | ['Fishing Rod', 189] 33 | ] 34 | 35 | order_ids = [] 36 | num_ids = 0 37 | # 2000 possible orders to group the items into 38 | while num_ids < 2000: 39 | order_ids.append(str(uuid.uuid4())) 40 | num_ids = num_ids + 1 41 | 42 | 43 | def create_order_data(): 44 | manufacturer = random.choice(manufacturers) 45 | item = random.choice(items) 46 | order = {} 47 | order['order_id'] = random.choice(order_ids) 48 | order['item_id'] = str(uuid.uuid4()) 49 | order['item_name'] = manufacturer[0] + ' ' + item[0] 50 | order['item_type'] = item[0] 51 | order['item_sku'] = order['item_name'][0:4].upper().replace('-', '') 52 | order['color'] = fake.color_name() 53 | order['item_price'] = str(round(manufacturer[1] * item[1])+.99) 54 | order['item_tax'] = str(round((float(order['item_price']) * .03), 2)) 55 | order['item_total'] = str( 56 | float(order['item_price']) + float(order['item_tax']) 57 | ) 58 | order['item_manufacturer'] = manufacturer[0] 59 | order['customer_name'] = fake.name() 60 | order['customer_phone_number'] = fake.phone_number() 61 | return order 62 | 63 | 64 | def send_to_dynamodb(item): 65 | print('Sending item to DynamoDB: ' + str(item)) 66 | table.put_item(Item=item) 67 | 68 | 69 | def write_orders(): 70 | n = 0 71 | while n < 100000: 72 | time.sleep(.25) 73 | n = n + 1 74 | # Create random order 75 | new_order = create_order_data() 76 | # When true, used to occassionally throw 77 | # out things that aren't PenguinPolar 78 | condition1 = [ 79 | new_order['item_manufacturer'] != 'PenguinPolar', 80 | random.randint(1, 101) > 70 81 | ] 82 | # When true, used to occassionally throw out 83 | # things that aren't Sunglasses or Carabiners 84 | condition2 = [ 85 | new_order['item_type'] not in ['Sunglasses', 'Carabiner'], 86 | random.randint(1, 101) > 70 87 | ] 88 | # When true, used to occassionally throw out 89 | # Ice Pick and Crampons 90 | condition3 = [ 91 | new_order['item_type'] in ['Ice Pick', 'Crampon'], 92 | random.randint(1, 101) > 20 93 | ] 94 | if all(condition1) or all(condition2) or all(condition3): 95 | new_order = create_order_data() 96 | send_to_dynamodb(new_order) 97 | else: 98 | send_to_dynamodb(new_order) 99 | 100 | 101 | if __name__ == '__main__': 102 | write_orders() 103 | -------------------------------------------------------------------------------- /course-lessons-project/project2-order-management-system/prod-requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2018.8.24 2 | chardet==3.0.4 3 | elasticsearch==6.3.1 4 | idna==2.7 5 | requests==2.19.1 6 | requests-aws4auth==0.9 7 | urllib3==1.23 8 | -------------------------------------------------------------------------------- /course-lessons-project/project3-spark-emr-referral-data/README.md: -------------------------------------------------------------------------------- 1 | ## Create an AWS EMR Cluster 2 | 3 | 1. Navigate to the EMR portion of the AWS console 4 | 2. Press "create cluster" 5 | 3. General configuration: a) Give the cluster a name, b) Configure logging with an S3 logging bucket, c) Set a launch mode (Cluster) 6 | 3. Software configuration: a) emr-5.16.0, b) Applications = Spark: Spark 2.3.1 ... No AWS Glue 7 | 4. Hardware configuration - a) m4.large b) 3 instances 8 | 5. Create a keypair, default permissions 9 | 6. Spin up cluster 10 | 11 | ## Login to the Cluster 12 | 13 | 1. Connect to the cluster via SSH with a command that looks like this: `ssh -i ~/Downloads/yoursshkey.pem hadoop@ec2-11-234-567-89.compute-1.amazonaws.com` 14 | 2. Respond yes to the prompt 15 | 3. After the machine has loaded you can now use Spark! 16 | 17 | ## Using Spark and PySpark 18 | 19 | 1. You can enter the PySpark shell with the `pyspark` command. This command starts up the PySpark shell and makes the Spark Context `sc` object available to you without having to do anything else. 20 | 2. If you want to be a rebel, you can enter the Scala shell with the `spark-shell` command. 21 | 22 | ## Processing Data with PySpark 23 | 24 | 0. Create a new bucket with `aws s3 mb s3://penguin-outfitters-adpubdata` 25 | 1. Load `data.csv` into S3 through the AWS console or the AWS CLI with `aws s3 cp ./data.csv s3://penguin-outfitters-adpubdata/data.csv` 26 | 2. Copy and paste the code from advertisers.py into the PySpark console 27 | 3. See the output result to S3 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /course-lessons-project/project3-spark-emr-referral-data/advertisers.py: -------------------------------------------------------------------------------- 1 | # ./bin/pyspark 2 | 3 | import csv 4 | import json 5 | 6 | # Get raw data 7 | # Assumes headers are not present in files that are processed 8 | rawAdPubData = sc.textFile("s3://penguin-outfitters-adpubdata/data.csv") 9 | 10 | cleanAdPubData = rawAdPubData.map(lambda line: list(csv.reader([line]))) 11 | 12 | # Sample the cleaned data 13 | # cleanAdPubData.take(2) 14 | 15 | # Remove the advertiser dimension and get a key value tuple in the form: 16 | # ((publisher, datestring), sale_amount) 17 | CleanPubData = cleanAdPubData.map( 18 | lambda row: (((row[0][1]), (row[0][2])), float(row[0][3])) 19 | ) 20 | 21 | # Sampled the even cleaner data 22 | # CleanPubData.take(2) 23 | 24 | 25 | # Calculate publisher earnings based on 25% of goods sold 26 | publisherDailyPayments = CleanPubData.aggregateByKey( 27 | 0, 28 | lambda a,b: a+b*.25, 29 | lambda c,d: c+d 30 | ) 31 | 32 | def toJSONLine(data): 33 | return [data[0][0],data[0][1],str(round(data[1],2))] 34 | 35 | # Sample what it looks like when we send the data back out 36 | # publisherDailyPayments.map(toJSONLine).take(2) 37 | 38 | # Flatten the data back into a format that can be sent to JSON 39 | pubDailyPaymentsFlat = publisherDailyPayments.map(toJSONLine) 40 | 41 | # Collect all the data into a single file (not usually what you'd do) 42 | pubDailyPaymentsFlat.coalesce(1).toDF().write.save( 43 | "s3://penguin-outfitters-adpubdata/adPubResultsjson", 44 | format="json" 45 | ) 46 | -------------------------------------------------------------------------------- /course-lessons-project/project3-spark-emr-referral-data/data.csv: -------------------------------------------------------------------------------- 1 | Heidenreich-Skiles,Herman Group,04/04/2018,38.52 2 | Roob Inc,Brekke Inc,06/08/2018,100.25 3 | "Dickens, Reinger and Gerlach","Kreiger, Bogisich and Nolan",04/17/2018,245.48 4 | "Sawayn, Okuneva and Jacobson",Wuckert-Cole,04/12/2018,95.25 5 | "Witting, Koss and Stoltenberg",Carroll-Predovic,04/23/2018,38.81 6 | "Simonis, Roberts and McDermott",Abshire and Sons,04/24/2018,44.70 7 | Hoeger-Daniel,"Price, Jast and Johnston",04/26/2018,238.74 8 | Rippin and Sons,Farrell and Sons,06/11/2018,119.52 9 | "Morissette, Nolan and Bartoletti",Shanahan LLC,06/25/2018,231.61 10 | Schiller Inc,Gaylord-Donnelly,06/01/2018,123.69 11 | Hegmann-Ebert,McClure-Kassulke,05/16/2018,94.31 12 | Hermiston LLC,Walter Group,05/13/2018,104.57 13 | Kutch LLC,Hyatt Inc,05/15/2018,41.30 14 | Robel and Sons,Huels Inc,05/01/2018,44.82 15 | Stracke and Sons,Ondricka and Sons,04/17/2018,92.30 16 | Orn-Murphy,Klocko-Carter,05/24/2018,227.27 17 | "Satterfield, Kuphal and Gulgowski","Moore, Daniel and Jerde",04/19/2018,241.55 18 | Pollich LLC,"Rogahn, Ullrich and Rutherford",06/25/2018,69.41 19 | Becker-Pfannerstill,Heaney LLC,06/27/2018,90.55 20 | "Cormier, Runte and West","Boyer, Hermiston and Lynch",06/09/2018,162.57 21 | Botsford-Ferry,Quigley and Sons,05/29/2018,91.27 22 | "Hilll, Schiller and Johnston",Schuster-Pacocha,04/11/2018,108.34 23 | Murazik-Abbott,Rolfson Inc,06/02/2018,129.81 24 | Hilll Group,Doyle-Bayer,04/27/2018,136.21 25 | "Medhurst, Cremin and O'Hara",Purdy LLC,06/13/2018,209.78 26 | "Harris, Kohler and Simonis",Johns and Sons,06/22/2018,172.48 27 | Jacobs-Carter,Torphy-Breitenberg,04/28/2018,48.95 28 | Connelly-Ward,Murazik Inc,05/17/2018,106.65 29 | "Anderson, Schimmel and Stamm",Doyle-Graham,06/04/2018,192.86 30 | Mayer Inc,Glover-Terry,04/07/2018,137.77 31 | Howe-Turcotte,Schaefer and Sons,04/17/2018,104.49 32 | Hilll Inc,"Marvin, Hammes and Gutkowski",05/15/2018,131.92 33 | "Halvorson, Denesik and Rippin",Hessel-Balistreri,04/02/2018,178.61 34 | "Maggio, Mayert and Hilpert",Braun-Schuppe,04/12/2018,236.96 35 | "Considine, Swift and Koss",Gleichner-Schamberger,05/26/2018,222.46 36 | Kihn Group,Zulauf Group,06/26/2018,79.95 37 | Huel-Donnelly,Christiansen-Wolff,04/29/2018,188.74 38 | Mante Group,Hudson Group,06/24/2018,91.51 39 | "Collins, Mayer and Daniel",Stiedemann-Herzog,04/14/2018,81.37 40 | Kemmer Group,Wintheiser LLC,05/27/2018,176.68 41 | Walter Inc,"Smith, Hilpert and Cremin",05/14/2018,117.56 42 | "Runolfsson, Toy and Marquardt",Walter-Schroeder,04/05/2018,233.53 43 | "Kuhic, Gulgowski and Mohr","Weber, Leuschke and Bayer",04/12/2018,210.10 44 | Kilback Group,DuBuque and Sons,06/13/2018,240.21 45 | Runte Group,"Shields, Rowe and Bechtelar",04/28/2018,164.38 46 | Herman Group,"Zulauf, Reichert and Sawayn",04/14/2018,173.11 47 | "Durgan, Metz and Bosco","Oberbrunner, Pouros and Tromp",04/19/2018,232.80 48 | Hermann-Hintz,McClure-Olson,04/14/2018,154.81 49 | Roberts-Metz,Sporer-Thiel,04/09/2018,112.43 50 | Runolfsdottir and Sons,Hackett Group,04/13/2018,41.68 51 | "Wintheiser, Mertz and Bauch",Collier-Harvey,04/15/2018,117.79 52 | Crooks-Ziemann,"Dare, Satterfield and Morar",04/28/2018,161.03 53 | Armstrong Group,Ryan-Kuhn,05/27/2018,229.20 54 | Corkery-Crist,Auer-Hartmann,04/07/2018,230.59 55 | "Marquardt, Dicki and Schiller","Feeney, Roob and Nienow",04/04/2018,104.01 56 | Hahn and Sons,Borer Group,05/07/2018,86.66 57 | Hills LLC,Runolfsson-Bernhard,05/27/2018,85.04 58 | "Leannon, Cremin and Welch",Rogahn-O'Keefe,05/13/2018,107.60 59 | "Carroll, Kiehn and Lebsack",Dickens-Lakin,05/21/2018,157.81 60 | Farrell-Schaefer,"Runolfsson, Lockman and Stokes",06/20/2018,201.26 61 | Little LLC,"Hegmann, Howe and Rosenbaum",06/24/2018,232.75 62 | "Leffler, Swift and Wehner","Balistreri, Toy and Simonis",04/17/2018,115.56 63 | Oberbrunner Inc,Borer-Doyle,04/16/2018,49.68 64 | Altenwerth-Waelchi,Rau Group,04/30/2018,43.22 65 | "Rau, Kiehn and Hagenes","Halvorson, Ryan and Zemlak",06/23/2018,235.03 66 | Thompson-Batz,"Bartoletti, Adams and Kshlerin",05/26/2018,54.91 67 | "Muller, Shields and Ankunding","Breitenberg, Farrell and Hand",04/05/2018,170.03 68 | MacGyver-Bernier,Farrell-Hayes,05/06/2018,80.54 69 | "Padberg, Wiza and Kuhlman",Reichel Inc,04/07/2018,90.38 70 | Reinger LLC,Bernhard LLC,06/28/2018,248.11 71 | Zieme-Bayer,"Grimes, Roberts and Moen",04/30/2018,126.35 72 | Rowe LLC,"Olson, Okuneva and Wintheiser",04/05/2018,170.04 73 | Cremin-Wisozk,"Becker, Medhurst and Denesik",05/09/2018,58.05 74 | Mayer LLC,Vandervort and Sons,05/08/2018,204.40 75 | Greenholt LLC,Bernier-Cassin,05/09/2018,226.23 76 | "Nikolaus, Von and Turcotte",Huel Group,06/24/2018,39.94 77 | Lowe LLC,Watsica Group,05/19/2018,69.12 78 | "Cormier, Hane and Stokes","Will, Labadie and Koelpin",05/20/2018,122.19 79 | "Leannon, Smitham and McClure",Morar-Hahn,05/24/2018,141.88 80 | Konopelski-Lakin,Bruen-Hessel,05/25/2018,74.72 81 | Konopelski-Zboncak,Bartoletti Group,04/26/2018,184.04 82 | "Beahan, Sipes and Kemmer","Keebler, Toy and Purdy",04/08/2018,37.46 83 | McKenzie-Mertz,Buckridge and Sons,04/26/2018,45.82 84 | "Kozey, Olson and Schmeler",Greenholt LLC,04/23/2018,87.82 85 | Bartoletti LLC,Cormier-Johnston,04/10/2018,214.86 86 | Witting and Sons,Torphy LLC,04/22/2018,198.68 87 | "Fay, Wiza and Jacobi",Jones-O'Reilly,04/21/2018,209.12 88 | Sipes Inc,"Gulgowski, Ebert and Zieme",04/15/2018,99.61 89 | Spinka-Pollich,Ebert-Kshlerin,06/11/2018,246.55 90 | "Torphy, Berge and Russel",Ernser-Nikolaus,04/18/2018,177.58 91 | "Hills, Schneider and Fahey",Senger-Windler,06/24/2018,146.53 92 | Nienow-Schroeder,Blanda and Sons,05/04/2018,206.90 93 | Nolan-Crooks,Heller-Leuschke,06/04/2018,151.83 94 | Rempel and Sons,Turcotte Group,05/31/2018,41.01 95 | Fahey-Ferry,"Schamberger, Halvorson and Fay",04/13/2018,269.33 96 | "Schuster, Crooks and Nienow",Rolfson Inc,06/13/2018,163.11 97 | Wunsch-Waelchi,Fisher Group,05/15/2018,37.42 98 | Stoltenberg and Sons,Towne Group,05/28/2018,242.14 99 | "Feil, Berge and Kreiger","Gutmann, Legros and Ankunding",04/20/2018,68.19 100 | Corwin-Predovic,Schoen-Orn,05/01/2018,45.24 101 | "Graham, Marvin and Tillman",Quitzon-Dickens,06/16/2018,127.91 102 | "Farrell, Wyman and Stanton","Sipes, Hackett and Osinski",06/06/2018,243.39 103 | "Bosco, Lubowitz and Hammes",Bauch-Kling,06/17/2018,234.32 104 | Hahn-Hyatt,"Schamberger, Gulgowski and Miller",05/08/2018,146.33 105 | Weimann Group,Farrell Group,06/26/2018,42.91 106 | "Ferry, Nicolas and Reinger",Fritsch-Nikolaus,05/19/2018,122.10 107 | Bartoletti LLC,Bergnaum-McLaughlin,06/12/2018,228.94 108 | "Mraz, Cummings and Conn","Buckridge, Wolff and Luettgen",04/05/2018,166.41 109 | "Kub, Koelpin and Tromp",Ferry LLC,05/15/2018,147.05 110 | "Towne, Lockman and Pfeffer","Walker, Farrell and Bauch",04/01/2018,203.52 111 | Nikolaus Inc,"Daugherty, Olson and Runte",05/05/2018,95.57 112 | Adams-Marvin,"Konopelski, Gibson and Robel",05/08/2018,147.57 113 | "Glover, Thiel and Lang",Kassulke-Walter,04/05/2018,91.37 114 | Bauch Group,"Wiza, Bergnaum and Leffler",04/05/2018,95.17 115 | "Daniel, Trantow and Gislason",Weimann-Trantow,04/16/2018,188.02 116 | "Miller, Pacocha and Cummerata","Goyette, Ruecker and Bailey",06/03/2018,164.45 117 | "Ullrich, Friesen and Luettgen",Cole and Sons,06/21/2018,141.13 118 | "Marvin, Kuvalis and Jacobi","Armstrong, Stanton and Pfannerstill",05/24/2018,142.55 119 | Mosciski-Zboncak,Prosacco-Rau,04/05/2018,189.47 120 | Koelpin LLC,Koepp Group,04/25/2018,44.34 121 | Lynch-Cummings,Russel-Beier,05/19/2018,54.61 122 | "Lesch, Bosco and Kling",Cruickshank-Padberg,05/31/2018,117.90 123 | Koelpin-Kohler,"Rolfson, Connelly and Gerhold",04/21/2018,86.93 124 | Bergstrom Group,Bayer-Schulist,04/30/2018,136.36 125 | Pagac-Bailey,Watsica-Price,06/02/2018,226.59 126 | D'Amore-Heaney,"Willms, Kunde and Mertz",05/11/2018,46.37 127 | Botsford Group,"Quitzon, Kreiger and Bogan",06/26/2018,203.64 128 | Thiel-Steuber,"Will, Ankunding and Stracke",04/20/2018,149.66 129 | "Cole, Graham and McDermott","Thiel, Beer and Barrows",06/14/2018,124.02 130 | Wuckert Group,Cummings-Purdy,05/30/2018,161.83 131 | Hane and Sons,Orn Inc,05/10/2018,145.58 132 | "Beier, Willms and Ferry",Tillman-Ortiz,04/11/2018,237.39 133 | Zemlak-Rolfson,Stokes-Koelpin,05/25/2018,74.52 134 | Stehr LLC,Huel-Nolan,06/18/2018,109.58 135 | McClure-Borer,"Cartwright, Gleason and Kautzer",06/27/2018,79.40 136 | Baumbach-Quigley,"Wyman, Swaniawski and Haag",05/21/2018,102.28 137 | "Brekke, Will and Klocko",Frami-Daugherty,05/29/2018,49.59 138 | "Feest, Prohaska and Thiel",Grant-Senger,05/03/2018,165.58 139 | Sauer Group,Hickle and Sons,04/19/2018,166.27 140 | Baumbach-Flatley,Hartmann-Halvorson,06/05/2018,215.16 141 | Johns Inc,Kshlerin-Crist,05/23/2018,117.17 142 | "Kozey, Witting and Hansen",Bernier Inc,05/15/2018,54.47 143 | "Connelly, Marvin and Bayer",Hegmann LLC,04/03/2018,180.04 144 | "Mann, Gulgowski and Beatty",Cronin-Sanford,04/18/2018,246.28 145 | Batz LLC,"Langosh, Luettgen and Ortiz",06/01/2018,148.34 146 | Moen Inc,Tremblay-Christiansen,04/24/2018,166.44 147 | "Howe, Jast and Heaney",Walsh Group,04/14/2018,189.36 148 | Huels and Sons,Ward and Sons,06/27/2018,141.23 149 | Sauer-Labadie,"Bashirian, Batz and Homenick",05/17/2018,101.65 150 | Keebler-West,"Mante, Lesch and Grant",05/27/2018,91.42 151 | "Smith, Hansen and Effertz",Kertzmann LLC,06/09/2018,62.74 152 | Nolan and Sons,"Bailey, Pouros and McLaughlin",05/11/2018,158.71 153 | Medhurst Group,Miller-Koepp,04/09/2018,245.78 154 | Marquardt and Sons,"Pollich, Welch and Yost",06/12/2018,233.11 155 | Buckridge-Lemke,Crist LLC,05/10/2018,49.17 156 | Dickinson-Koelpin,Leannon Inc,04/07/2018,146.33 157 | Mraz Inc,Hettinger-Medhurst,05/29/2018,200.83 158 | Ratke and Sons,Keeling-Schamberger,05/02/2018,203.97 159 | "Bernhard, Mitchell and Lakin",Konopelski-Keeling,06/13/2018,39.62 160 | Dare-Jakubowski,Marquardt LLC,04/02/2018,177.66 161 | Effertz Inc,Parker Inc,05/12/2018,178.55 162 | Mraz-Robel,Anderson-Krajcik,06/13/2018,82.05 163 | "Yundt, Powlowski and Lebsack","Abshire, Moen and Schmitt",05/05/2018,151.34 164 | "Fahey, Schneider and Maggio","Beatty, Mante and Hirthe",04/16/2018,123.72 165 | Yundt Inc,"Greenholt, Parker and Friesen",04/24/2018,218.34 166 | "Gusikowski, West and Hodkiewicz",Cole and Sons,06/05/2018,38.20 167 | Konopelski-Weissnat,Waelchi-Mills,06/20/2018,192.75 168 | Pfeffer and Sons,Smitham and Sons,04/15/2018,196.24 169 | Kihn and Sons,Gerlach and Sons,06/08/2018,103.90 170 | Abernathy LLC,Gutmann LLC,05/05/2018,145.42 171 | Mitchell-Hoeger,Cummings and Sons,06/27/2018,246.86 172 | Orn-Murazik,VonRueden-Bartell,05/14/2018,215.50 173 | Kris Group,Hessel-Daugherty,06/23/2018,115.13 174 | Hansen Group,"Hudson, Tromp and Monahan",05/05/2018,41.56 175 | "Mohr, Schaden and Rutherford",Jerde Group,05/27/2018,160.00 176 | Witting Inc,"Bednar, Hahn and Stokes",05/31/2018,95.31 177 | "West, Towne and Hayes","Collins, McDermott and McClure",06/10/2018,392.67 178 | "Towne, Roberts and Murphy",Zulauf-Schuppe,04/13/2018,205.40 179 | Pfeffer Inc,"Cormier, Yost and Halvorson",04/16/2018,103.18 180 | Vandervort and Sons,Grady Group,04/04/2018,76.23 181 | Kemmer Inc,Veum Group,05/07/2018,137.73 182 | "Goodwin, Zboncak and Bergnaum",Armstrong-Swaniawski,05/23/2018,203.25 183 | "Kunze, Dibbert and Hills",Bosco-Frami,04/15/2018,159.56 184 | Stehr-Mertz,Watsica and Sons,04/05/2018,91.92 185 | Hammes-Kovacek,Hahn LLC,04/19/2018,203.53 186 | "Zboncak, Johns and Schuster",Bartell-Stoltenberg,05/30/2018,54.43 187 | Beer-Schneider,Rohan-Kutch,05/18/2018,143.57 188 | Hilpert Inc,Hauck-Schuppe,06/10/2018,58.84 189 | "Christiansen, Bailey and Kovacek",Hartmann-Hoeger,04/18/2018,228.08 190 | "Altenwerth, Zulauf and Bailey",Klein-Blick,04/02/2018,43.11 191 | Von-Altenwerth,"Waters, DuBuque and Heathcote",05/30/2018,246.14 192 | Breitenberg-Graham,Crooks and Sons,06/15/2018,99.71 193 | "Dickens, Schmitt and Kris","Nienow, Balistreri and Bins",06/03/2018,82.51 194 | "Schowalter, Baumbach and Kirlin",Cassin LLC,04/10/2018,46.96 195 | Mante-Runolfsdottir,Schumm-Jenkins,05/15/2018,104.47 196 | "Quitzon, Mohr and Hilpert",Crona Group,05/30/2018,149.85 197 | Sauer Inc,Satterfield and Sons,05/07/2018,219.83 198 | "Corkery, Adams and Kunde",Goyette Inc,05/10/2018,63.47 199 | Hermiston Inc,Heaney and Sons,05/16/2018,155.11 200 | "Jerde, Runte and Schmeler","Beatty, Kohler and Adams",06/20/2018,326.48 201 | "Shanahan, Klocko and Roberts",Schaefer Inc,06/08/2018,89.98 202 | McGlynn-Hermann,"Raynor, Greenfelder and Beatty",06/16/2018,173.28 203 | Jaskolski and Sons,Ratke-Leuschke,05/24/2018,198.01 204 | Kris and Sons,"Fisher, Luettgen and Wolf",06/21/2018,149.45 205 | "Kerluke, Hirthe and King","Schoen, Lynch and McLaughlin",06/16/2018,119.97 206 | "Ernser, Hamill and Bechtelar",Monahan and Sons,04/21/2018,238.63 207 | Medhurst-Pfeffer,"Brakus, Rogahn and Braun",04/16/2018,197.74 208 | Tillman LLC,"Huels, Reinger and Abshire",05/06/2018,180.87 209 | Bode-Wilderman,Dooley-Wilderman,06/02/2018,121.30 210 | Predovic LLC,"Denesik, Hayes and Marquardt",04/18/2018,100.90 211 | "Nienow, Bernhard and Rutherford","White, Feil and Carter",04/23/2018,156.09 212 | Altenwerth Inc,Sawayn-Stamm,06/28/2018,228.34 213 | Conn-Hoppe,Auer Group,06/22/2018,220.19 214 | "O'Reilly, Ebert and Weissnat",Champlin Group,06/26/2018,104.86 215 | "Prosacco, Schuppe and Witting",Bailey-Waters,05/18/2018,237.17 216 | Deckow-Gibson,Swaniawski Group,05/07/2018,131.95 217 | Runte Inc,"Rosenbaum, Maggio and Wehner",04/17/2018,187.14 218 | "Schumm, Johns and Prosacco","Hettinger, McCullough and Nolan",06/12/2018,49.80 219 | Runte Inc,Cassin Group,04/30/2018,179.84 220 | Lesch-Hackett,"Smith, Kunde and Frami",06/26/2018,77.95 221 | "Roob, Fritsch and Romaguera",Wehner-Medhurst,04/15/2018,50.44 222 | Conroy-Bechtelar,Ullrich-Murphy,06/23/2018,53.86 223 | Emmerich Group,Ferry and Sons,06/20/2018,55.73 224 | "Bogisich, Friesen and Jacobs",Considine-Schuster,06/11/2018,41.73 225 | "Emmerich, Murazik and Nienow",Herzog Group,04/17/2018,61.26 226 | McLaughlin Inc,"Kozey, Hilll and Fritsch",05/30/2018,77.03 227 | Reinger Inc,Stoltenberg-McKenzie,04/01/2018,204.96 228 | Bode-Kling,Donnelly LLC,05/20/2018,206.33 229 | Hartmann-Kerluke,Hintz Group,04/10/2018,58.03 230 | "Abbott, Mante and Veum","Hoeger, Lind and Fisher",04/12/2018,99.48 231 | MacGyver-Barrows,Collier-Murazik,04/17/2018,90.02 232 | "McCullough, Senger and Gaylord",Ullrich LLC,05/26/2018,152.02 233 | Cormier and Sons,Casper Group,06/24/2018,119.37 234 | "Buckridge, Friesen and Beer","Grant, Boehm and Rippin",05/12/2018,182.15 235 | "Sporer, Abbott and Runte",Herzog-Kohler,06/26/2018,95.19 236 | Rodriguez LLC,"Fisher, Pouros and Heaney",05/02/2018,214.56 237 | Smitham Inc,"Rowe, Schimmel and Murazik",04/06/2018,70.01 238 | "Halvorson, Kessler and Emmerich","Swift, VonRueden and Veum",06/03/2018,244.66 239 | Labadie Group,Dach-Larson,04/19/2018,224.96 240 | Rutherford and Sons,"Klein, Price and Barrows",04/24/2018,215.75 241 | "Kassulke, Borer and Johns",Bosco-Gerlach,05/06/2018,246.42 242 | Lakin Inc,Bergnaum Inc,05/10/2018,209.66 243 | Quigley Inc,Hoppe LLC,05/18/2018,119.31 244 | Daugherty LLC,Boehm-Brekke,05/15/2018,165.88 245 | "Schoen, Lebsack and Runolfsson","Sipes, Wolf and Hayes",04/29/2018,166.77 246 | Wolff-Ondricka,"Franecki, Ritchie and Gibson",04/28/2018,106.59 247 | "Windler, Hoeger and Von",Dickinson-Stoltenberg,06/04/2018,241.77 248 | Donnelly-Mitchell,"Gleason, McLaughlin and Toy",06/22/2018,122.59 249 | "Goldner, Sauer and Jast",Rempel-Herzog,06/28/2018,106.02 250 | Hilll and Sons,Dare-Brown,06/01/2018,231.37 251 | "Rodriguez, Heidenreich and Champlin","Hoeger, Runolfsdottir and Kihn",05/26/2018,163.18 252 | Skiles-Hermann,"Blanda, Rempel and Pouros",04/19/2018,109.17 253 | Stoltenberg-Leuschke,Schaefer-Bechtelar,05/11/2018,59.66 254 | Price-McGlynn,"Walsh, Kautzer and Wiegand",06/08/2018,80.81 255 | "Block, Ritchie and Bechtelar",McLaughlin-Jakubowski,04/15/2018,275.54 256 | Kuhlman-Schaefer,"Heller, Stamm and Johns",05/06/2018,146.90 257 | Wehner-Rodriguez,"Beahan, Becker and Sawayn",05/13/2018,94.03 258 | "Jenkins, Heidenreich and Walsh","Marks, Kemmer and Adams",05/28/2018,224.76 259 | Graham and Sons,Goldner-Brakus,04/01/2018,168.94 260 | "Bechtelar, Littel and Schmeler","Crist, Reichert and Rath",04/29/2018,58.72 261 | "Ratke, Ward and O'Keefe",Witting-Waelchi,04/25/2018,225.42 262 | Graham-Schaden,"Gerlach, Willms and Thiel",04/02/2018,180.80 263 | Walter-Willms,Paucek-Upton,05/07/2018,232.72 264 | Strosin-Carroll,Rodriguez-Fritsch,05/02/2018,49.88 265 | Russel and Sons,Stamm LLC,04/03/2018,111.85 266 | Dietrich Inc,"Krajcik, Willms and Pagac",04/14/2018,194.39 267 | Langworth Group,Cartwright-Roberts,05/15/2018,174.91 268 | "Blick, Breitenberg and Schmitt","Casper, Harris and Schimmel",04/18/2018,228.26 269 | Feeney-Kertzmann,"Gulgowski, Rosenbaum and Wilderman",04/04/2018,73.59 270 | "Kiehn, Connelly and Pfannerstill",Oberbrunner-Pollich,05/26/2018,101.49 271 | Bergnaum-Dare,Herzog-Parisian,04/25/2018,128.83 272 | Grady-Smitham,"Hegmann, Kling and Terry",04/12/2018,120.77 273 | Stamm-Gleichner,Haley Inc,05/21/2018,214.03 274 | Corwin LLC,"Weimann, Jerde and Moore",05/13/2018,122.03 275 | Kuhlman-Schmitt,Bogisich Group,05/08/2018,123.59 276 | "Murphy, Runolfsdottir and Dare",White-Cassin,06/07/2018,101.52 277 | Wolf LLC,Corwin-Crist,06/13/2018,130.17 278 | "Ryan, Heller and Walter",Jones Group,06/01/2018,50.28 279 | Schumm-Marquardt,Balistreri LLC,04/30/2018,204.43 280 | "Parisian, Bartell and Fritsch",Denesik and Sons,04/06/2018,96.96 281 | Sauer-Gleason,Wuckert-Runte,04/26/2018,174.34 282 | "Wiegand, Smith and Cormier","Barrows, Tromp and Marvin",04/20/2018,253.32 283 | Roberts-Purdy,Hilpert-Mitchell,04/05/2018,65.82 284 | Tromp-Yost,Shanahan and Sons,06/05/2018,107.12 285 | Tillman-Runte,Raynor and Sons,04/18/2018,43.52 286 | Cruickshank LLC,Wisozk-Rohan,05/04/2018,174.09 287 | Kunde-Hane,Grady-Davis,05/27/2018,130.66 288 | Lockman-Walsh,Hammes Group,04/07/2018,49.18 289 | Nolan LLC,Skiles and Sons,04/14/2018,50.98 290 | "Ledner, VonRueden and Bradtke",Mertz-Paucek,04/10/2018,198.80 291 | Hoeger and Sons,Strosin LLC,06/08/2018,112.32 292 | "Lemke, Zulauf and Hettinger",Schulist and Sons,06/28/2018,189.86 293 | Boehm-Nitzsche,Feest and Sons,06/06/2018,177.58 294 | Lang-Schimmel,Spinka LLC,05/30/2018,180.74 295 | D'Amore-Krajcik,Moore Group,05/22/2018,62.17 296 | Hayes and Sons,Morissette-Hilll,04/07/2018,114.46 297 | Conroy-Mraz,Koss Group,04/11/2018,190.48 298 | "Metz, Heathcote and Kris",Halvorson and Sons,05/12/2018,82.83 299 | "Romaguera, Gibson and Rogahn","Wintheiser, Maggio and Bradtke",04/01/2018,52.81 300 | Jacobs-Spencer,"Denesik, Tremblay and Pollich",04/28/2018,183.70 301 | "Altenwerth, Considine and Littel","Fahey, Schmeler and Kilback",05/27/2018,114.35 302 | Wolff and Sons,Nienow Inc,04/24/2018,205.81 303 | Waelchi LLC,"Wisoky, Rowe and Boyer",05/03/2018,55.61 304 | "Wiegand, Mills and Dare",Cummings-Gerlach,06/11/2018,186.16 305 | Lesch Inc,Pacocha Group,04/08/2018,245.13 306 | Reichert and Sons,"Wolf, Dare and Hahn",06/29/2018,139.01 307 | Schimmel LLC,Luettgen Inc,04/15/2018,108.18 308 | Gaylord-Nicolas,Kihn Group,05/18/2018,215.49 309 | "Balistreri, Muller and Graham",Franecki-Marquardt,04/12/2018,54.90 310 | Lehner Inc,Gislason-Haag,06/22/2018,99.99 311 | Dooley-Koepp,Marks-Gleason,04/17/2018,48.01 312 | Deckow-Collier,Lockman-Labadie,05/02/2018,134.65 313 | "Smitham, Wehner and Gaylord",Hansen-Predovic,04/05/2018,55.07 314 | "Blanda, Wilderman and Reichert",Schmidt-Welch,04/06/2018,106.17 315 | Goodwin-Marks,"Krajcik, Padberg and Renner",06/17/2018,168.06 316 | Spinka-Feil,Buckridge LLC,04/02/2018,222.52 317 | Baumbach-Gleason,West-Torphy,04/08/2018,100.26 318 | Buckridge LLC,O'Connell LLC,06/10/2018,106.47 319 | Ebert and Sons,"Von, Upton and O'Connell",05/30/2018,77.47 320 | Aufderhar LLC,Maggio LLC,06/03/2018,231.60 321 | McDermott Inc,"Veum, Rogahn and Nicolas",06/17/2018,171.73 322 | Emard-Daniel,"Lakin, Skiles and Parisian",04/22/2018,218.81 323 | Stokes-Effertz,Quitzon-Doyle,05/09/2018,111.26 324 | "Satterfield, Herman and Franecki","Stroman, Vandervort and Berge",04/14/2018,96.31 325 | "Purdy, Abbott and Sipes",Sawayn-Nader,04/27/2018,51.55 326 | "VonRueden, Nikolaus and Zemlak",Mante Inc,05/24/2018,134.14 327 | Gutkowski Group,"Cronin, Fahey and Waelchi",04/26/2018,247.65 328 | Padberg and Sons,Marks Inc,04/18/2018,53.21 329 | "Streich, Windler and Weimann",Bauch LLC,04/03/2018,220.23 330 | Paucek-Altenwerth,"Jenkins, Kris and Kling",05/10/2018,175.56 331 | "Ledner, Doyle and Swift",Block and Sons,04/20/2018,55.99 332 | Mertz and Sons,Ledner-Osinski,05/05/2018,242.86 333 | Vandervort-Armstrong,Harvey-Bailey,05/13/2018,125.68 334 | "Rosenbaum, Kuhlman and Littel","White, Kemmer and Kautzer",04/16/2018,106.04 335 | "Rau, Douglas and Wyman",Jaskolski and Sons,06/12/2018,223.71 336 | "Graham, Lind and Bechtelar","Jacobi, Prosacco and Schiller",05/13/2018,94.05 337 | "Considine, Weissnat and Stanton",Pfeffer-Mills,04/01/2018,245.75 338 | "Satterfield, Powlowski and Haag",Howell-Braun,04/22/2018,200.48 339 | "Lebsack, Dicki and Corwin","Hahn, Abshire and Jast",04/08/2018,216.25 340 | "Bednar, Leannon and Langosh",Gerlach-Friesen,05/27/2018,63.58 341 | "Bailey, Sawayn and Schulist",Lueilwitz and Sons,05/29/2018,117.07 342 | Schoen-Torp,"Hansen, Glover and Witting",05/14/2018,66.10 343 | Koelpin-Bruen,"Windler, Fritsch and Erdman",06/26/2018,220.91 344 | Hintz-Reichel,"Jast, Kub and Vandervort",05/08/2018,226.43 345 | "Boehm, Lockman and Goyette","Hoppe, Lesch and O'Conner",04/03/2018,201.41 346 | Hartmann Group,Boyle-Herman,05/25/2018,194.41 347 | Lemke and Sons,"Steuber, Stehr and Stehr",05/02/2018,121.86 348 | Johnston Group,Schiller LLC,04/12/2018,99.82 349 | Heaney-Koelpin,"Gislason, Hackett and Kulas",05/02/2018,150.30 350 | Hirthe-Tromp,Streich LLC,06/18/2018,231.08 351 | "Kassulke, Wunsch and Hoppe",Turner-Padberg,04/09/2018,199.29 352 | Rogahn-Lynch,"Leffler, Hills and Witting",06/15/2018,151.36 353 | Champlin LLC,"Auer, Haag and Murazik",05/24/2018,244.67 354 | Ullrich Inc,Marquardt Inc,04/25/2018,226.88 355 | "Olson, Brown and Block","Kuphal, Tillman and Barrows",06/08/2018,233.67 356 | "Hickle, Robel and Sawayn",Cremin-Swaniawski,06/07/2018,172.91 357 | Fritsch-Hansen,Schimmel LLC,04/07/2018,213.85 358 | Bruen-Mayer,Tromp-Wisoky,04/06/2018,183.64 359 | Ledner-Donnelly,Schoen Group,04/14/2018,63.73 360 | "Walker, Robel and Rutherford",Fadel Inc,04/15/2018,178.59 361 | Jakubowski-Dickens,Medhurst-Sanford,06/20/2018,59.24 362 | Batz-Wiza,Welch Group,05/17/2018,161.80 363 | "Monahan, Ebert and Wyman","McCullough, Reynolds and Cormier",06/22/2018,82.83 364 | "Bode, Marquardt and Stracke","Toy, Donnelly and Bode",05/04/2018,241.84 365 | Kunde-Wilkinson,Pacocha-Cummings,05/21/2018,117.08 366 | "Sporer, Lind and Grady","Mitchell, Heaney and Klocko",04/20/2018,99.52 367 | Rolfson LLC,Ferry-Bosco,06/11/2018,145.78 368 | Armstrong LLC,Zulauf Inc,05/17/2018,63.77 369 | Kuphal-Kulas,Rolfson Inc,04/23/2018,202.89 370 | Schoen-Lakin,Kub LLC,05/12/2018,51.47 371 | Mayert LLC,Gibson-Haley,05/14/2018,100.15 372 | Altenwerth-Marvin,"Nienow, Shanahan and Brakus",05/27/2018,65.60 373 | Hettinger-Rice,"Dach, Simonis and Murazik",05/02/2018,142.60 374 | Donnelly Group,Spinka Group,04/15/2018,38.95 375 | Hartmann-Fahey,Carter Group,04/03/2018,157.60 376 | Schamberger-Emmerich,Beatty-Yundt,06/06/2018,192.24 377 | Dare-Fay,Brakus LLC,04/15/2018,245.65 378 | "Wintheiser, Lang and Hickle",Fisher-Wiza,05/22/2018,167.45 379 | West-Bashirian,Walker-Stanton,05/15/2018,243.23 380 | Kautzer LLC,"Gleichner, Roob and Hahn",04/22/2018,119.72 381 | Harvey-Hermiston,Gibson LLC,05/09/2018,111.93 382 | Wilkinson LLC,Spinka-Wehner,05/15/2018,136.91 383 | "Hilpert, Stroman and Hand",Harvey-Zemlak,05/19/2018,153.66 384 | Wisoky Group,"Cole, Hayes and Trantow",06/01/2018,217.79 385 | Koss Group,Beer-Bednar,04/24/2018,59.59 386 | Leannon-Herzog,"Reichel, Wehner and McKenzie",06/08/2018,164.56 387 | Langosh Inc,Blanda-Pfannerstill,05/12/2018,186.06 388 | Stanton-Reynolds,"Schamberger, Heaney and Lind",06/29/2018,186.70 389 | Bailey Group,Kozey LLC,05/15/2018,82.42 390 | Mayert-Spencer,"Kiehn, Ryan and Luettgen",06/16/2018,235.62 391 | Blick-Kunde,Turcotte Group,05/02/2018,102.14 392 | Monahan LLC,"Schimmel, Graham and Koss",04/05/2018,202.13 393 | Muller-Koepp,Emard-Larson,06/01/2018,238.47 394 | "Mills, Reichert and Walker",Bosco-Dibbert,05/18/2018,81.87 395 | "Haley, Crooks and Stroman",Feeney Inc,05/28/2018,92.46 396 | Waelchi-Stark,Mayer Group,06/10/2018,193.86 397 | Mosciski-Greenfelder,"Ward, Denesik and Tremblay",05/01/2018,109.63 398 | Schaden Group,"Franecki, Spencer and Reichert",05/23/2018,178.70 399 | Effertz-Herzog,"MacGyver, Mohr and Sawayn",06/10/2018,220.28 400 | "Monahan, Mayert and Rosenbaum",Orn-Vandervort,04/14/2018,237.55 401 | Luettgen and Sons,"Braun, Smitham and Hartmann",06/27/2018,203.71 402 | "Boyer, Brakus and Cole",Gislason-Baumbach,05/28/2018,45.92 403 | "Witting, Stracke and Kuhic","Homenick, Lehner and Schmeler",04/10/2018,223.27 404 | Armstrong-Zboncak,Hermann-Roob,06/28/2018,180.74 405 | Cassin-Connelly,"Braun, Schumm and Davis",06/22/2018,109.61 406 | Lang LLC,Kessler and Sons,04/11/2018,113.65 407 | "Moore, Nader and Heidenreich",Hessel-Abshire,04/01/2018,87.61 408 | Bashirian Inc,Pacocha-Pollich,04/15/2018,48.16 409 | Sipes-Walsh,"Rice, Bode and Fritsch",04/13/2018,111.20 410 | Goldner and Sons,"Grimes, Gerlach and McClure",06/23/2018,112.96 411 | Feil Inc,Gorczany-Morissette,05/06/2018,76.98 412 | Gislason-Denesik,Prosacco-Jakubowski,05/09/2018,143.86 413 | Moore-Pfannerstill,"Upton, Dickens and Rau",05/08/2018,73.62 414 | Nader-Senger,"Waters, Lowe and Beatty",06/05/2018,154.82 415 | Kshlerin-Huels,"Bergnaum, Bruen and Schoen",05/13/2018,175.29 416 | Koss LLC,"Reinger, West and Cormier",04/03/2018,67.63 417 | Runolfsdottir-DuBuque,"Schmitt, Hirthe and Jacobs",05/07/2018,345.81 418 | Conroy Group,"Prohaska, McGlynn and Bode",06/09/2018,128.74 419 | Hammes-Ritchie,Schaefer-Becker,04/24/2018,209.27 420 | Thiel Group,"Jerde, Howell and Cummerata",05/23/2018,145.15 421 | "Nienow, Labadie and Cartwright",Rolfson Inc,04/01/2018,247.41 422 | "Turcotte, Murazik and Parker",Heller and Sons,05/14/2018,57.92 423 | Sauer-Cremin,Dach Inc,06/04/2018,50.24 424 | "Gorczany, Runolfsson and Bernhard",Davis-Herzog,06/01/2018,143.93 425 | Green-Howe,Willms-Breitenberg,04/19/2018,183.40 426 | "Lubowitz, Stiedemann and McCullough","Bogisich, Kuhn and Marks",05/07/2018,248.37 427 | Upton-Rice,Cruickshank-Kuvalis,04/15/2018,241.23 428 | Hamill-Weimann,Upton-Collier,05/03/2018,218.16 429 | "Mraz, Dicki and Marks","Braun, Hermiston and Stanton",06/21/2018,224.29 430 | Hodkiewicz-Beahan,Mayer-Koss,04/17/2018,94.34 431 | "Cronin, Romaguera and Kuvalis",Schmidt Inc,04/24/2018,162.56 432 | Corwin-Blick,Ruecker-Kreiger,05/05/2018,202.00 433 | "Dach, Hauck and Dooley","Feil, Hayes and Breitenberg",06/21/2018,160.53 434 | Turcotte-Pagac,Dickinson-Rolfson,05/01/2018,185.81 435 | Gottlieb LLC,"Thiel, Bailey and Gerlach",04/17/2018,188.36 436 | Goodwin Inc,Williamson-Larkin,05/08/2018,233.47 437 | Marquardt-Raynor,Bogan LLC,04/16/2018,165.19 438 | "Runte, O'Hara and Schiller",Boyer and Sons,06/17/2018,71.07 439 | "Dare, Bechtelar and Bahringer",Kozey-Cormier,04/23/2018,118.03 440 | Beahan Group,Turner-Crona,04/07/2018,174.58 441 | Abernathy-Walter,Maggio-Feeney,04/14/2018,195.41 442 | Konopelski Inc,Watsica LLC,04/18/2018,146.92 443 | "Bernhard, Miller and Braun",Pfannerstill LLC,06/29/2018,84.27 444 | "Buckridge, Farrell and Beer",McCullough-Watsica,06/10/2018,136.11 445 | Jaskolski Group,Roberts Inc,05/07/2018,44.79 446 | Balistreri and Sons,"Morar, Conn and Franecki",06/05/2018,179.84 447 | Feest LLC,Crooks-Medhurst,05/23/2018,114.79 448 | "Haag, Larson and Beier",Kiehn LLC,04/13/2018,148.73 449 | Blanda-Breitenberg,Maggio-Tremblay,06/22/2018,90.14 450 | "O'Hara, Skiles and Mohr","West, Boyer and Wiegand",04/28/2018,200.50 451 | "Rosenbaum, VonRueden and Gaylord",Cronin and Sons,05/01/2018,40.13 452 | "Luettgen, Terry and Hills","Klocko, Nikolaus and Grimes",04/24/2018,136.99 453 | Spencer LLC,Vandervort-Bins,05/28/2018,47.23 454 | Collier-Lynch,Towne-Witting,06/07/2018,129.28 455 | Ward-Morissette,Watsica-Gibson,04/14/2018,170.08 456 | "Stracke, Adams and Ratke",Reynolds and Sons,05/01/2018,109.57 457 | Goldner Group,"Gleason, Stokes and Hegmann",04/07/2018,185.45 458 | "Corkery, Dickinson and Lesch","Spinka, Sauer and Mertz",04/30/2018,545.97 459 | Bailey Inc,Collins-Berge,06/04/2018,158.30 460 | "Schmidt, Cummerata and McKenzie",Marquardt Inc,06/10/2018,156.81 461 | Langworth-Kovacek,"Kub, Gerlach and Hansen",05/21/2018,135.72 462 | Mueller Group,Kilback-Bruen,05/09/2018,201.35 463 | King-Schmeler,"Dickens, McGlynn and Cronin",06/17/2018,42.54 464 | "Schultz, Monahan and Kozey","Lemke, Koch and DuBuque",04/03/2018,221.91 465 | Hermiston-Powlowski,"Sawayn, Reynolds and Roob",06/09/2018,68.34 466 | Gorczany LLC,"DuBuque, Boehm and Grimes",06/23/2018,39.14 467 | "Heathcote, McClure and Heathcote",Gibson-Kiehn,05/26/2018,188.15 468 | Mueller-Champlin,"Torphy, Dooley and Schmitt",05/03/2018,215.03 469 | "Mraz, Feil and Marks","Sanford, Mueller and Langosh",06/23/2018,119.00 470 | Bruen-Torp,Tillman Inc,05/15/2018,236.86 471 | "Kunde, Schamberger and Labadie","Kub, Kirlin and Herzog",05/05/2018,70.40 472 | Franecki-Kozey,Frami-Pacocha,06/29/2018,75.85 473 | "Gorczany, White and Dicki","Beer, Rippin and Tillman",04/10/2018,179.84 474 | Rosenbaum LLC,Walter-Shanahan,05/28/2018,134.53 475 | Muller Group,"Brakus, Beier and Murray",06/24/2018,236.75 476 | "Hilll, Labadie and Auer",Heidenreich Group,04/23/2018,57.25 477 | Sawayn-Franecki,Kassulke and Sons,05/14/2018,180.45 478 | Mueller LLC,Larson-Prosacco,06/25/2018,45.66 479 | Schroeder-Murphy,King Inc,05/12/2018,221.91 480 | Koelpin Inc,Welch LLC,06/24/2018,172.82 481 | "Leannon, Herman and Vandervort",Powlowski-Lakin,05/02/2018,235.82 482 | Schiller and Sons,Walker LLC,04/08/2018,48.18 483 | "Schuppe, Stoltenberg and Ankunding",Stehr Inc,05/04/2018,97.84 484 | Marks LLC,"Brakus, Torp and Yost",06/14/2018,98.86 485 | "Hayes, Ferry and Predovic","Rodriguez, Reichel and Satterfield",06/11/2018,221.00 486 | "Wilderman, Gaylord and Schaefer",Grimes Group,05/27/2018,52.30 487 | "Schowalter, Koelpin and Ondricka",Stokes LLC,04/25/2018,175.72 488 | Armstrong Inc,"Herzog, Beatty and Kautzer",04/07/2018,37.53 489 | Bayer-Koss,"McLaughlin, Hettinger and Kautzer",05/02/2018,232.39 490 | Medhurst Inc,Williamson and Sons,04/22/2018,68.05 491 | Yost Inc,"Davis, Ondricka and Bruen",05/10/2018,180.14 492 | Mayer-Gutmann,"Casper, Gislason and Gerhold",05/07/2018,177.11 493 | "Mayert, Rogahn and Brown",Kirlin and Sons,05/27/2018,132.12 494 | Mann-Prohaska,"White, Raynor and Howe",05/20/2018,127.75 495 | Kub-Feeney,Kreiger-Donnelly,05/11/2018,167.84 496 | Sauer LLC,"Pagac, Larson and Block",05/07/2018,148.04 497 | O'Kon-Stiedemann,Torphy and Sons,04/16/2018,218.16 498 | Rohan-Greenfelder,"Batz, Daniel and Welch",06/28/2018,188.60 499 | Nienow and Sons,Will Inc,04/03/2018,153.79 500 | Osinski Inc,Russel-Murray,04/08/2018,184.95 501 | "Grant, Price and Walsh",Bode Group,04/12/2018,208.38 502 | "Stiedemann, Pacocha and Kiehn",Keeling-Hagenes,05/02/2018,174.17 503 | Douglas-Kris,Rath LLC,05/05/2018,202.36 504 | Hackett LLC,"Veum, Willms and Bogisich",05/05/2018,99.46 505 | Breitenberg Group,"O'Keefe, McCullough and Terry",06/20/2018,213.88 506 | "Batz, Stoltenberg and Nader",Stehr-Boehm,05/27/2018,56.44 507 | Johns and Sons,Fadel-Lindgren,06/01/2018,189.96 508 | Hintz Group,Rath Inc,04/02/2018,204.88 509 | Wilkinson and Sons,Durgan-Heaney,04/05/2018,103.26 510 | Berge-Swaniawski,Beahan-Hermiston,06/26/2018,48.24 511 | Crist-Jacobi,"DuBuque, Russel and Welch",05/29/2018,225.58 512 | Prohaska-West,Dicki Group,05/23/2018,178.73 513 | Beer-Casper,Walker Group,05/27/2018,246.58 514 | Runolfsson-Kreiger,Marquardt-Leffler,04/08/2018,170.62 515 | "Wolff, Ferry and Stoltenberg",Kuvalis and Sons,04/12/2018,215.23 516 | Wisoky Group,Rowe Inc,05/22/2018,168.00 517 | Farrell-Hilpert,"Hills, Steuber and Hessel",05/09/2018,152.50 518 | Walsh and Sons,"Kessler, Sawayn and Cartwright",04/26/2018,198.22 519 | Cummerata LLC,Wilderman Inc,04/06/2018,79.30 520 | Abbott-Blanda,"Steuber, Miller and Lakin",04/06/2018,80.14 521 | "Dickens, Johnston and Kris",Schmeler and Sons,04/16/2018,60.88 522 | "Rippin, Bayer and Tromp",Schinner-Klein,05/26/2018,121.79 523 | "Jacobson, Ondricka and Osinski",Zieme-Wolf,06/27/2018,235.40 524 | Sipes-Trantow,Mueller-Hackett,05/23/2018,46.44 525 | Blick-O'Hara,"Carroll, Conroy and Waelchi",05/02/2018,228.53 526 | "Osinski, Kub and Kunde","Keebler, Feeney and Watsica",05/07/2018,56.17 527 | McCullough-Labadie,"Kirlin, Emmerich and Mueller",06/12/2018,81.79 528 | Lebsack Group,Herman LLC,05/17/2018,224.01 529 | "Gaylord, Deckow and Morar","Lind, Heidenreich and Koepp",05/06/2018,166.93 530 | "Goodwin, Mayert and Mann","Corkery, Strosin and Wisoky",04/05/2018,86.04 531 | "Cassin, Jacobs and Barrows",McCullough-Hessel,05/26/2018,67.52 532 | Fisher Group,Fadel LLC,05/10/2018,130.34 533 | Walker-Okuneva,Keeling LLC,05/23/2018,138.18 534 | "Dibbert, Bosco and Swaniawski","Dooley, Jast and Block",06/27/2018,44.03 535 | Balistreri-Mills,Schuster and Sons,06/12/2018,154.43 536 | Powlowski-Murray,Wunsch-Kreiger,06/11/2018,171.20 537 | Armstrong-Pagac,"Aufderhar, Jakubowski and Spencer",05/07/2018,179.72 538 | "Boyle, Fay and Rau",Roob and Sons,05/28/2018,155.98 539 | Maggio Group,Lindgren-Schmidt,05/18/2018,83.58 540 | "Maggio, Ondricka and Spencer",Littel-Kuvalis,05/17/2018,106.30 541 | "Turner, Hilpert and Harvey",Johns LLC,06/22/2018,49.33 542 | Cole and Sons,Rice and Sons,04/10/2018,112.99 543 | Olson-Haley,"Schroeder, Skiles and Wiza",04/11/2018,206.77 544 | "Ziemann, Bartell and Bailey",Simonis-Mosciski,06/08/2018,46.84 545 | "Brown, Wintheiser and Ledner",Rogahn-Quitzon,05/23/2018,212.32 546 | "Murphy, D'Amore and Kutch",Legros-Blick,05/17/2018,216.99 547 | "Hills, Casper and Hayes","Pagac, Schimmel and Turcotte",05/01/2018,131.16 548 | Auer LLC,Howell and Sons,05/11/2018,61.99 549 | Grant-Murazik,"Leuschke, Farrell and Yost",04/04/2018,92.02 550 | Howe Inc,"Kozey, Hirthe and Bernhard",04/27/2018,234.75 551 | "Bruen, Kozey and Wisozk","Bednar, Carroll and Jaskolski",04/21/2018,235.15 552 | Nikolaus-Conn,"Streich, Prosacco and Leffler",05/04/2018,229.31 553 | Will LLC,Hackett Inc,05/02/2018,171.73 554 | Stehr LLC,Waelchi Inc,05/22/2018,52.90 555 | "Altenwerth, Stokes and Dicki","Ondricka, Grady and Volkman",06/01/2018,155.30 556 | Kohler-Feest,Ferry and Sons,04/09/2018,50.58 557 | Hoppe LLC,Upton-Hackett,04/12/2018,172.48 558 | Bartell Inc,"Rolfson, Koss and Kuhic",05/14/2018,189.27 559 | Bosco LLC,"Stamm, Lakin and Schimmel",06/26/2018,230.37 560 | "Schulist, Labadie and Hickle",Kerluke Group,05/16/2018,70.79 561 | Considine LLC,Runte-Satterfield,06/04/2018,186.06 562 | Beatty-Sauer,Jast-Crona,06/12/2018,242.07 563 | Zieme Inc,Schmitt-Kessler,04/06/2018,217.45 564 | Mueller-Hettinger,Heaney LLC,05/16/2018,173.52 565 | Grady Group,"Rolfson, Wilkinson and Mitchell",04/04/2018,130.65 566 | "Gutmann, Kassulke and Ferry",Kreiger-Senger,04/27/2018,207.68 567 | Grimes Group,"Ebert, Hackett and Gleason",06/25/2018,213.64 568 | Corkery LLC,Schoen LLC,05/17/2018,60.56 569 | "Fay, Windler and Willms",Bergstrom and Sons,06/02/2018,55.91 570 | Kovacek-Hodkiewicz,Bailey-Powlowski,05/01/2018,106.67 571 | Mayer-Donnelly,"Blanda, Glover and Schulist",05/16/2018,53.06 572 | McLaughlin-Schaefer,Schaefer and Sons,04/29/2018,174.54 573 | Wolff-Hammes,Gerhold-Wilderman,05/16/2018,224.53 574 | Hudson Inc,D'Amore LLC,06/26/2018,216.08 575 | Anderson Group,Cassin-Pouros,04/16/2018,219.87 576 | Wolf-McDermott,Reynolds Group,06/25/2018,153.22 577 | "Rippin, Macejkovic and Koelpin",Hartmann Group,05/02/2018,248.77 578 | Lebsack-McLaughlin,"Jacobson, Stehr and Zulauf",04/21/2018,127.36 579 | Howe-Koelpin,Johnston-Zulauf,06/13/2018,163.91 580 | Schroeder-Heidenreich,Mills and Sons,06/01/2018,113.66 581 | Kozey Group,"Shields, Terry and McDermott",06/05/2018,106.74 582 | "Rath, Christiansen and Rolfson",Beahan LLC,05/02/2018,223.27 583 | Dicki Group,Boyle-Ruecker,04/14/2018,167.76 584 | "Dietrich, Nitzsche and Maggio",Toy-Wehner,05/26/2018,61.75 585 | Hegmann-Haag,Kozey and Sons,04/28/2018,128.26 586 | Johns-Rempel,Dooley Inc,05/03/2018,177.54 587 | Schowalter-Rodriguez,Adams-Kessler,05/20/2018,57.07 588 | "Gutkowski, Marvin and Hand","Koelpin, Crist and Bailey",06/04/2018,105.87 589 | Spencer Inc,"Rath, Hickle and Gorczany",05/02/2018,69.30 590 | "Greenholt, Miller and Schroeder",Schuppe and Sons,04/11/2018,114.65 591 | Kuphal-Johnston,Gottlieb Inc,05/03/2018,129.55 592 | "Rowe, Powlowski and Russel",Shanahan-Simonis,06/06/2018,74.00 593 | Wintheiser-Block,Predovic Group,05/05/2018,227.39 594 | Lowe Inc,"Schuppe, Bruen and Mayert",04/20/2018,154.73 595 | Mills and Sons,Schinner LLC,06/21/2018,232.30 596 | Kohler-Renner,Olson Inc,06/05/2018,212.38 597 | Marks-Lehner,"Jaskolski, Paucek and Kovacek",06/08/2018,80.14 598 | Williamson-Von,Waters-Bernier,06/04/2018,145.07 599 | Reichel-Schumm,Lakin-Sporer,05/01/2018,154.08 600 | Kreiger Group,Auer-Schmeler,05/20/2018,62.28 601 | Kuhic Group,Russel LLC,06/22/2018,210.78 602 | Kub Inc,Klocko Inc,06/16/2018,102.87 603 | "Schaden, Goldner and Armstrong",Christiansen-Schmidt,06/14/2018,248.78 604 | Frami Group,"Romaguera, Hammes and Leannon",04/22/2018,228.27 605 | Flatley-Halvorson,Walker Group,04/07/2018,230.73 606 | Langworth-Ritchie,Morissette Inc,04/05/2018,83.28 607 | Treutel-Mertz,Kautzer Inc,05/10/2018,203.96 608 | "Littel, McGlynn and Heidenreich",Collins and Sons,04/28/2018,153.76 609 | Anderson-Leffler,Sanford Inc,04/06/2018,161.64 610 | Hermann-Bergnaum,Marvin Inc,05/09/2018,105.31 611 | Boyer Group,"Kuvalis, Shanahan and Strosin",05/17/2018,179.76 612 | "Huels, Turcotte and O'Kon",Howe and Sons,06/08/2018,45.90 613 | Reilly-Beatty,"Welch, Mosciski and Purdy",06/02/2018,123.32 614 | Klocko Group,Lemke-Moen,04/04/2018,46.93 615 | Lakin-Prosacco,"Bruen, Bashirian and Wiza",04/26/2018,125.21 616 | Bernier-Williamson,Hamill Group,06/08/2018,193.20 617 | Wilkinson-Larson,"Aufderhar, Greenholt and Waelchi",05/02/2018,163.27 618 | O'Reilly Group,Cronin-Olson,06/01/2018,139.29 619 | Jacobson and Sons,Jacobi-Blick,04/02/2018,196.26 620 | Fay-Funk,Price Inc,05/21/2018,46.73 621 | Champlin-Hills,"Erdman, Schmitt and Herman",05/19/2018,143.37 622 | Fisher-Ruecker,"Erdman, Waelchi and Balistreri",04/25/2018,215.12 623 | "Kreiger, Casper and Kulas",Schinner Inc,04/27/2018,95.09 624 | "Roberts, Medhurst and Wolf",Connelly-McGlynn,05/24/2018,177.49 625 | "Frami, Wiza and Huel","Dibbert, Quitzon and Emard",04/17/2018,171.04 626 | Pfeffer Inc,Auer-Ullrich,05/14/2018,69.27 627 | Veum-Schmeler,"Moen, Schinner and Greenfelder",04/20/2018,201.21 628 | Macejkovic-O'Conner,"Sipes, Gaylord and Cole",06/19/2018,205.39 629 | Mohr-Hilll,"O'Conner, Gusikowski and Frami",05/23/2018,111.91 630 | "Zboncak, Smitham and Konopelski",O'Connell and Sons,04/08/2018,151.58 631 | Feeney-Brakus,Stroman-Hauck,04/14/2018,73.68 632 | "Hackett, Gorczany and Ullrich",Turner-Hilll,05/25/2018,111.24 633 | Franecki LLC,Stokes Inc,05/11/2018,135.50 634 | "Cummings, Schultz and Hagenes",Bode Group,04/16/2018,203.26 635 | "Schoen, Corkery and Eichmann",Schuppe-White,06/13/2018,148.38 636 | "Kutch, Toy and Roberts",Cremin-Hackett,04/14/2018,92.61 637 | "Borer, Champlin and Bernier",Grady Group,06/18/2018,47.78 638 | "Morar, Frami and Lynch",Willms-Morar,06/08/2018,86.09 639 | Morissette Inc,"Kreiger, Heathcote and Wisozk",04/08/2018,131.37 640 | "Considine, Price and Cummerata","Herman, Zieme and Friesen",05/08/2018,203.27 641 | Kris-Moen,Gleason LLC,04/18/2018,70.97 642 | Quigley and Sons,"Lind, Labadie and Terry",05/20/2018,120.34 643 | "Cassin, Littel and Zboncak","Kuphal, VonRueden and Stroman",04/07/2018,185.14 644 | Kohler LLC,Ruecker Inc,04/22/2018,54.07 645 | MacGyver Inc,Dibbert-Effertz,05/27/2018,83.24 646 | Klein-Murray,Stokes Inc,06/10/2018,180.82 647 | "Conn, Fisher and Cummerata",VonRueden-Krajcik,06/15/2018,98.67 648 | Schultz-MacGyver,Kassulke Inc,04/19/2018,94.59 649 | "Mayert, Prosacco and Hills",Roberts-Schaefer,05/09/2018,98.58 650 | Jacobson-Mraz,Rutherford-Hane,05/06/2018,185.39 651 | Halvorson-Howe,Wunsch-Kling,06/12/2018,204.32 652 | Will and Sons,"Botsford, White and Bergstrom",06/15/2018,223.02 653 | Harber Group,Kihn Group,04/29/2018,50.98 654 | "Shanahan, Glover and Lesch","Lindgren, Heller and Ondricka",06/14/2018,241.23 655 | Heathcote-White,Weimann Group,05/08/2018,171.74 656 | Heidenreich LLC,"Dickinson, Powlowski and Nikolaus",05/20/2018,195.71 657 | Graham-Senger,O'Hara-Roberts,04/15/2018,62.42 658 | "Graham, Huel and Mohr",Williamson-Kozey,06/01/2018,53.32 659 | "Schaden, Herman and Hyatt",Barton-Crist,04/26/2018,210.56 660 | "Rutherford, Rolfson and Tromp","Waelchi, Dach and Prosacco",04/07/2018,105.20 661 | "Von, Schumm and Swaniawski",White LLC,06/03/2018,139.73 662 | "Gerlach, Durgan and Nader","VonRueden, Konopelski and Nader",06/07/2018,122.39 663 | "Morar, Bailey and Jacobs",Muller LLC,06/05/2018,37.89 664 | Stiedemann-Heller,Gerhold-Stoltenberg,04/21/2018,176.66 665 | "Hirthe, Zboncak and Fisher",Kuphal LLC,05/13/2018,225.99 666 | "Romaguera, Hand and Raynor","Weimann, Kreiger and Beier",06/13/2018,39.11 667 | Renner Inc,"Ortiz, Roberts and Jenkins",04/15/2018,105.88 668 | Kohler-Sipes,"Botsford, Bahringer and Brakus",05/19/2018,131.75 669 | Harber-Hessel,"Olson, Runolfsson and Harris",06/14/2018,159.20 670 | Armstrong Inc,Kovacek-Medhurst,04/03/2018,147.42 671 | Champlin-Lebsack,Labadie-Beier,06/10/2018,182.45 672 | "Cremin, Mayer and Stokes",Adams and Sons,04/28/2018,86.82 673 | "VonRueden, Beer and Gleichner",Gleason-Mante,06/17/2018,172.79 674 | Carter Group,MacGyver LLC,06/16/2018,105.44 675 | Hirthe Group,Gutmann-Bartell,06/25/2018,183.36 676 | Smith-Robel,Strosin Inc,06/12/2018,165.73 677 | Gottlieb-Hintz,Schuppe-Murray,05/28/2018,74.41 678 | Bogan-Casper,"Ledner, Crooks and Gulgowski",06/13/2018,85.85 679 | Christiansen-Schoen,Oberbrunner-Mraz,06/07/2018,166.08 680 | "Steuber, Corkery and Schoen","Keeling, Gislason and Batz",05/25/2018,208.77 681 | "White, Stroman and Rohan",McDermott-Schuppe,04/04/2018,172.39 682 | "Schiller, Altenwerth and Langworth",Bergnaum and Sons,05/14/2018,140.72 683 | Schmeler-Parker,Lynch and Sons,06/27/2018,243.74 684 | "Boyle, Rau and Effertz","Boehm, Reilly and Ondricka",04/01/2018,157.86 685 | "Kuhlman, Skiles and Bogan","Harber, Mayert and Bradtke",05/19/2018,225.05 686 | Jacobs-Bergnaum,Gutkowski-Nikolaus,06/26/2018,82.73 687 | "Mueller, Schmeler and Boehm",Klein-Hansen,04/29/2018,121.26 688 | Shields Inc,Effertz LLC,04/25/2018,95.39 689 | Dibbert LLC,Kessler Inc,04/30/2018,70.06 690 | "Konopelski, Miller and Schuster",Franecki-Prohaska,06/10/2018,238.16 691 | "Heidenreich, Feil and Jenkins","Collier, Konopelski and Cronin",05/05/2018,120.76 692 | McKenzie Group,Rohan Group,06/21/2018,125.66 693 | Littel and Sons,Beer-Toy,05/16/2018,99.85 694 | Kovacek-Gaylord,Metz-Gerlach,06/13/2018,211.88 695 | "Rath, Wunsch and Cummings",Swaniawski LLC,05/22/2018,45.52 696 | Waters and Sons,Hauck-O'Hara,04/13/2018,224.00 697 | "Armstrong, Dietrich and Farrell","Lubowitz, Gutkowski and Green",04/03/2018,149.44 698 | "Reilly, Aufderhar and Jaskolski",Ortiz-Mueller,05/18/2018,198.52 699 | "Marvin, Hirthe and Prohaska","Fisher, Sipes and Barrows",04/16/2018,50.20 700 | "Donnelly, Wolf and Zulauf",Schoen-Lemke,04/30/2018,62.83 701 | "Hermiston, Dach and Fisher",Walter-Bauch,04/06/2018,106.05 702 | "Jacobson, Leuschke and Langworth","Sanford, Toy and Klein",05/04/2018,123.77 703 | Franecki-Nolan,Hammes Inc,05/13/2018,213.36 704 | "Stanton, Stoltenberg and Wiza",Glover LLC,06/17/2018,113.08 705 | Mills-Haley,Ward LLC,04/16/2018,175.93 706 | "Baumbach, Brown and Dooley",Stanton-Pfeffer,06/19/2018,134.38 707 | Sauer-Hackett,"Wintheiser, Rath and Roob",06/13/2018,187.95 708 | "Johns, Schamberger and Brakus",Bogan LLC,04/06/2018,106.01 709 | Pollich LLC,Cruickshank Group,04/24/2018,60.29 710 | "Romaguera, Prohaska and Harber","Brakus, Williamson and Hintz",06/23/2018,217.79 711 | Kuhn-Bayer,"Romaguera, Nitzsche and Pacocha",05/01/2018,156.17 712 | Cartwright-Yundt,Powlowski-Lynch,05/21/2018,60.00 713 | "Walker, Collins and Feil","Strosin, Bailey and Block",04/17/2018,72.30 714 | Lockman-Ledner,Heller-Aufderhar,05/04/2018,149.43 715 | Jast LLC,Conroy Inc,05/12/2018,207.84 716 | Swaniawski Group,"Dietrich, Hane and Pacocha",05/11/2018,200.15 717 | Champlin-Collier,Windler and Sons,05/21/2018,129.88 718 | Jacobson LLC,Leuschke-Bauch,05/12/2018,69.80 719 | Graham Group,Strosin-Gutkowski,06/09/2018,43.26 720 | Collier-Stoltenberg,Hirthe Group,04/24/2018,101.59 721 | Pfeffer-Marvin,Kuhlman and Sons,05/29/2018,144.40 722 | Brekke LLC,Lockman and Sons,04/27/2018,119.02 723 | "Schamberger, Baumbach and Gottlieb",Monahan-Sawayn,04/15/2018,76.94 724 | "Kertzmann, Cartwright and Goodwin","Labadie, Prosacco and Lemke",05/19/2018,46.74 725 | Streich Group,"Johns, O'Hara and Ondricka",04/08/2018,204.94 726 | Rogahn-Conroy,"MacGyver, Bernhard and Dickens",06/10/2018,212.99 727 | Wuckert-MacGyver,Torp-Sipes,06/15/2018,248.39 728 | Collins-Hills,Jacobi Group,06/06/2018,139.56 729 | Thiel and Sons,"Simonis, Price and Denesik",05/11/2018,212.13 730 | Conroy Group,"Cremin, Price and Hettinger",05/25/2018,83.11 731 | Stiedemann Group,Hansen LLC,06/27/2018,201.05 732 | Walter-Heller,Grimes-Stokes,05/25/2018,116.74 733 | "Smitham, Denesik and Koch",Greenholt-Wehner,04/05/2018,87.56 734 | Wolff Group,"Kihn, Schoen and Gleason",05/15/2018,80.79 735 | Koss Inc,Mann and Sons,05/15/2018,173.16 736 | Herman-Franecki,Maggio Inc,05/02/2018,224.61 737 | Collins LLC,Schiller Inc,04/14/2018,226.04 738 | "Legros, Hessel and Ledner","Farrell, Abernathy and Hand",04/01/2018,187.56 739 | Grady-Kuhic,Hahn-Hammes,06/15/2018,74.67 740 | Olson Inc,"Turner, Mertz and Wyman",06/24/2018,101.52 741 | Okuneva-Beahan,Jacobi LLC,06/20/2018,161.50 742 | "Rice, Lakin and Metz","Cummerata, Zboncak and Wolff",05/17/2018,248.74 743 | "Mayer, Glover and Rath",Nitzsche-Lindgren,06/27/2018,212.56 744 | Moore-Ortiz,Heidenreich Inc,04/12/2018,55.37 745 | Kshlerin Inc,Bruen Group,04/28/2018,83.68 746 | O'Kon-Kohler,Heaney Inc,05/16/2018,114.48 747 | Bosco Inc,"Kihn, Borer and Dickinson",05/17/2018,44.05 748 | Green Group,Borer and Sons,05/04/2018,248.36 749 | Bauch-Murphy,"Larson, Herman and Nikolaus",04/17/2018,66.58 750 | Walker and Sons,Yost Group,04/02/2018,244.40 751 | "Rosenbaum, Nitzsche and Brown",Hermiston-Hills,06/21/2018,148.60 752 | Stamm Group,Effertz Group,04/23/2018,79.22 753 | Corkery LLC,"Spinka, Champlin and Rath",06/29/2018,61.03 754 | Reinger-Sporer,Berge LLC,05/15/2018,154.14 755 | "Stracke, Collier and Greenholt",Dickinson LLC,05/14/2018,175.34 756 | Borer-Sanford,Kovacek LLC,05/19/2018,236.34 757 | Morissette Inc,Moen-Strosin,05/16/2018,230.34 758 | "Wolff, Kilback and Langworth",Schaefer-Kovacek,04/22/2018,196.59 759 | "White, Torp and Bernhard","Carter, Prohaska and Fahey",06/28/2018,47.77 760 | "Runolfsson, Bauch and Beatty",Cummerata and Sons,05/01/2018,207.17 761 | Luettgen Inc,Waters and Sons,06/27/2018,95.40 762 | "Harris, Waters and Altenwerth","Watsica, Pollich and Rowe",05/11/2018,40.29 763 | "Champlin, Terry and Bins",Bode-Bernhard,04/03/2018,94.21 764 | Blick-Littel,"Mayer, Weissnat and Skiles",06/19/2018,104.21 765 | Langworth-Grant,"Hane, West and Nader",05/02/2018,134.59 766 | Reilly Group,Abernathy-Orn,04/22/2018,84.19 767 | Bergstrom Inc,"West, Lowe and Predovic",05/06/2018,85.52 768 | Hessel-Lockman,Gutkowski-Lueilwitz,04/13/2018,83.07 769 | "Schimmel, Simonis and Hegmann",Ernser Inc,05/14/2018,41.28 770 | Langworth Inc,"Kilback, Ward and Blick",04/09/2018,180.09 771 | "Lubowitz, Lindgren and Yost",McLaughlin-Rogahn,05/26/2018,137.42 772 | Bashirian-Rath,Hegmann LLC,06/16/2018,174.03 773 | Homenick-Nicolas,Spinka and Sons,06/18/2018,79.98 774 | "Von, Rice and Dietrich",Conroy-Mitchell,06/07/2018,172.93 775 | O'Reilly-Senger,"Bauch, Wilderman and Herman",06/28/2018,115.61 776 | Parisian-Crooks,Bahringer Group,05/14/2018,241.88 777 | "Nicolas, Bauch and Rowe",Torp-Labadie,05/19/2018,151.42 778 | "Harber, Goyette and Zemlak",Bartoletti Inc,05/18/2018,61.89 779 | "Pagac, Fahey and Bogan","Kshlerin, Conn and Wisozk",06/21/2018,233.79 780 | Nikolaus-Feest,Kovacek LLC,04/08/2018,216.20 781 | Breitenberg and Sons,Adams-Ernser,06/06/2018,89.05 782 | Stamm-Kuhic,Watsica LLC,06/14/2018,132.70 783 | Hane LLC,Emmerich LLC,06/25/2018,162.81 784 | "Farrell, Harris and Schuppe",Abshire Inc,06/21/2018,230.61 785 | Nikolaus-Grant,Beier-Metz,06/02/2018,238.75 786 | "Gerlach, Mayer and Strosin",Schamberger Inc,05/12/2018,124.46 787 | Donnelly Inc,Greenfelder Group,04/09/2018,49.17 788 | Will Group,"Moore, Howe and Sipes",04/11/2018,139.01 789 | "Casper, Cremin and Ryan",Koss-Stroman,04/15/2018,110.10 790 | "Robel, Sipes and King",Zulauf and Sons,05/24/2018,198.04 791 | "Reilly, Lockman and Kuphal","Cole, Donnelly and Cremin",06/02/2018,198.29 792 | "Mante, Reichert and Bradtke",Mante-Zemlak,06/10/2018,48.12 793 | Ledner and Sons,"Morar, Rowe and Jacobs",04/13/2018,231.48 794 | "Corwin, O'Keefe and Hermann",Bosco Group,05/13/2018,226.65 795 | "Borer, Mraz and Bayer","Bradtke, Swift and Farrell",05/18/2018,211.67 796 | "Gulgowski, Ward and Dare",Cartwright and Sons,05/27/2018,114.80 797 | "Lueilwitz, Olson and Fisher","Jenkins, Kohler and Jaskolski",05/24/2018,216.73 798 | Grimes Group,Hegmann and Sons,04/02/2018,138.70 799 | Zieme Inc,Renner LLC,04/16/2018,48.58 800 | "Feeney, Bernhard and Gusikowski",Block-Langosh,05/30/2018,108.78 801 | Dooley Inc,Bartoletti LLC,04/13/2018,122.44 802 | Wyman-Feest,Prohaska Inc,04/03/2018,59.72 803 | Funk-Jakubowski,Goodwin and Sons,05/28/2018,66.84 804 | Gerhold and Sons,Dach-Hessel,04/21/2018,55.05 805 | Haag and Sons,Thiel-Moore,05/01/2018,239.79 806 | Bergstrom Inc,"Emard, Koepp and O'Conner",06/04/2018,240.51 807 | Koelpin Group,Jones and Sons,06/09/2018,125.88 808 | Larson-Rohan,"Pagac, Nitzsche and Sipes",04/07/2018,117.04 809 | "Stroman, Stanton and Schowalter",Mayert LLC,04/15/2018,178.20 810 | Walker and Sons,"Hermiston, Hauck and Graham",05/09/2018,195.60 811 | Donnelly-Kertzmann,"Smith, Bailey and Rolfson",05/26/2018,99.82 812 | Purdy Group,"Waelchi, Medhurst and Nitzsche",06/07/2018,155.33 813 | Keebler-Aufderhar,"Zboncak, Macejkovic and Kertzmann",06/11/2018,184.69 814 | Weissnat LLC,Murazik-Kovacek,04/01/2018,63.22 815 | "Harris, Daugherty and McCullough",Kuhn Group,05/15/2018,216.33 816 | Lind Group,Williamson-Boehm,05/06/2018,173.19 817 | "Huel, Ondricka and Casper",Batz-Rohan,05/15/2018,149.12 818 | Armstrong-Kuhn,Green Group,06/08/2018,101.64 819 | "Lesch, Padberg and Buckridge",Reinger-Waelchi,05/21/2018,47.39 820 | Mante LLC,VonRueden-Toy,06/15/2018,246.45 821 | "Koch, Dicki and Littel","Renner, Hilll and Bailey",05/25/2018,42.75 822 | Bashirian-Strosin,Hirthe-Zemlak,06/21/2018,203.78 823 | Klein Inc,"Bode, Feest and Reichert",04/11/2018,89.69 824 | Ruecker and Sons,"Rogahn, Schoen and Carroll",04/29/2018,121.02 825 | "Hand, Zemlak and Blick",Schuppe Group,05/30/2018,37.79 826 | "Welch, McLaughlin and Cruickshank",Boyle Group,04/03/2018,84.08 827 | "Paucek, Heller and Wolf","Farrell, Champlin and Lang",04/16/2018,160.24 828 | Jaskolski-Stamm,VonRueden Inc,06/26/2018,190.60 829 | Baumbach-Hane,"Littel, Gleichner and Gorczany",06/26/2018,151.93 830 | Koss Inc,Yost-Mueller,04/27/2018,149.01 831 | Paucek Group,Parker-Keebler,04/24/2018,81.29 832 | Schroeder Inc,Keebler Group,06/22/2018,216.44 833 | Pouros-Stiedemann,Zulauf Group,04/25/2018,232.32 834 | Rosenbaum LLC,Volkman Inc,05/30/2018,74.57 835 | Bosco LLC,Senger and Sons,05/11/2018,185.36 836 | "Kiehn, Macejkovic and Dicki","Hagenes, Prosacco and Streich",05/03/2018,248.25 837 | "Larkin, Schamberger and Rowe",Gorczany-Hirthe,06/03/2018,241.81 838 | "Gottlieb, Sanford and Legros","Block, Johnson and Lakin",06/08/2018,223.25 839 | "Brekke, Murphy and Abbott",Osinski-Mraz,05/04/2018,54.48 840 | "Simonis, Grimes and Zemlak",Nicolas Group,05/12/2018,219.56 841 | "Armstrong, Barrows and Buckridge",Williamson-Cormier,05/12/2018,49.59 842 | Muller-Grant,Mann Inc,06/28/2018,100.13 843 | Parker-Stamm,Langworth-Schamberger,04/02/2018,158.77 844 | "Heidenreich, Simonis and Auer","O'Hara, Yundt and Muller",05/26/2018,157.24 845 | "Sporer, Crooks and Bernhard",Bahringer-Effertz,05/19/2018,210.91 846 | DuBuque Group,Tromp Group,05/23/2018,51.41 847 | Swaniawski and Sons,Jacobson and Sons,06/14/2018,226.83 848 | Blanda LLC,Collier-Hamill,05/01/2018,49.01 849 | Gleichner-Spencer,Wilkinson Inc,06/11/2018,165.49 850 | Turcotte-Brakus,McGlynn-Schiller,04/14/2018,159.80 851 | Wolf and Sons,"Waters, Robel and Hirthe",04/05/2018,105.72 852 | Hamill and Sons,Kunde-Hettinger,04/11/2018,89.19 853 | Mante and Sons,Stehr-Wyman,06/06/2018,113.00 854 | "Mayert, Gaylord and O'Connell",Keebler-Ward,05/23/2018,240.58 855 | Corkery LLC,Towne and Sons,04/24/2018,215.66 856 | Jakubowski Inc,"Zieme, Huels and Schoen",05/11/2018,166.29 857 | Goldner Group,Vandervort-Klocko,05/29/2018,205.19 858 | Watsica LLC,"White, Borer and Heidenreich",04/02/2018,107.98 859 | "Schmitt, Monahan and Heaney","Satterfield, Lubowitz and West",05/17/2018,51.44 860 | "Olson, Donnelly and Price","Purdy, Simonis and Macejkovic",05/23/2018,207.85 861 | Bogan-Stark,Hilll-Schuppe,06/07/2018,91.24 862 | "Heathcote, Becker and Lang",Klocko Inc,04/11/2018,171.29 863 | "Runolfsdottir, Schuppe and King",Langworth and Sons,05/07/2018,88.43 864 | "Schneider, Hilpert and Nikolaus",Cartwright and Sons,05/03/2018,172.81 865 | Krajcik-Ruecker,"Collier, Abernathy and Runolfsson",05/13/2018,45.64 866 | Leffler-Ebert,Runolfsdottir Group,05/20/2018,49.12 867 | Lind-Boehm,"Grady, Kassulke and Hudson",05/23/2018,123.60 868 | "White, O'Conner and Konopelski",Russel-Johnson,06/27/2018,81.62 869 | "Wintheiser, Ankunding and Thiel","Jakubowski, Ritchie and Bashirian",04/04/2018,152.16 870 | "Hilll, Klocko and Braun","Windler, Baumbach and Mayert",06/17/2018,54.79 871 | Altenwerth-Kulas,"Pfeffer, Lowe and Sauer",05/23/2018,207.22 872 | Prosacco-Effertz,Gleichner-Marks,06/11/2018,128.73 873 | Emmerich and Sons,Paucek-Klein,05/24/2018,153.57 874 | Rowe-Morissette,"Robel, Lynch and Schneider",04/03/2018,60.91 875 | Barrows Inc,Mraz LLC,06/15/2018,215.57 876 | Krajcik LLC,Cartwright-Murphy,05/26/2018,164.63 877 | "Herzog, Dicki and Stamm",Bode Inc,05/31/2018,225.72 878 | "Koss, Dickens and Treutel","Corwin, Balistreri and VonRueden",06/17/2018,190.35 879 | "Swift, Collins and Legros",Weimann and Sons,04/21/2018,43.74 880 | "Windler, Jones and Wilkinson",Kemmer Group,06/01/2018,227.94 881 | Wolf-Johnston,"White, Mraz and Fahey",06/05/2018,69.74 882 | "Roob, Wuckert and Bahringer","Deckow, Mayert and Beer",06/02/2018,153.01 883 | Osinski-Dicki,Herzog Inc,06/21/2018,233.83 884 | "Metz, Harber and Batz",Paucek-Johnston,05/05/2018,248.50 885 | Wuckert LLC,"Reinger, Fadel and Hahn",05/02/2018,245.24 886 | "Bashirian, Rempel and Hansen",Steuber-Ziemann,04/23/2018,230.79 887 | West Inc,Bauch-Johnson,05/29/2018,127.84 888 | Lockman and Sons,Buckridge and Sons,06/11/2018,76.32 889 | "Sanford, Hilpert and Cremin",Ratke LLC,06/13/2018,211.17 890 | Rowe-Hilll,Macejkovic LLC,06/24/2018,140.31 891 | Cole and Sons,Parker and Sons,05/24/2018,167.81 892 | Borer Inc,"Stoltenberg, Lindgren and Jacobs",05/21/2018,179.75 893 | "Koss, Kuhic and McKenzie",Oberbrunner-Weber,06/06/2018,158.69 894 | "McCullough, Hegmann and Gislason",Abshire-Balistreri,06/16/2018,73.78 895 | "Bergstrom, Jacobi and Sipes",Sporer Inc,04/07/2018,50.69 896 | Wolf-Baumbach,Pfeffer-Keebler,04/04/2018,44.27 897 | Ullrich-Paucek,"Runolfsdottir, Hoppe and Gulgowski",05/21/2018,152.60 898 | Kub LLC,McGlynn Group,04/11/2018,56.26 899 | "Turcotte, Langworth and Bartell",Jacobi-Nienow,06/14/2018,46.34 900 | Kutch and Sons,DuBuque-Dach,06/15/2018,86.13 901 | "Ortiz, Ratke and Greenholt",Hansen-Bradtke,05/20/2018,218.42 902 | Kuvalis Inc,McLaughlin Group,05/06/2018,62.52 903 | Kuhlman-Harris,Koch-Grimes,04/09/2018,197.35 904 | "Jones, Breitenberg and Casper",DuBuque-Klein,04/23/2018,67.06 905 | Considine-Stracke,Conroy Inc,06/19/2018,123.07 906 | "Jast, Stoltenberg and Torphy",Carroll-Stehr,04/29/2018,213.77 907 | Quigley-Emmerich,Harber-Larkin,06/28/2018,108.68 908 | O'Connell and Sons,"Blick, O'Reilly and McGlynn",06/16/2018,122.84 909 | Stiedemann Inc,Tromp and Sons,06/21/2018,160.25 910 | Sipes-Lind,"Padberg, Trantow and Romaguera",04/25/2018,196.73 911 | Herman-Ryan,"Jakubowski, Gerlach and Swaniawski",04/28/2018,83.89 912 | Parker Inc,Zemlak-Schulist,05/22/2018,119.39 913 | Ondricka Inc,Schulist-Ebert,05/03/2018,74.82 914 | Schneider Inc,Rosenbaum-Paucek,05/03/2018,142.64 915 | Schamberger-Kunde,"Kreiger, Kohler and Bartell",06/25/2018,167.23 916 | "Hermiston, Hayes and Hyatt",Kemmer Group,04/25/2018,125.29 917 | "Hudson, Hirthe and Kunde",Abshire-Schimmel,05/19/2018,214.45 918 | Adams and Sons,Fay and Sons,05/12/2018,114.51 919 | Champlin Inc,Streich Group,06/23/2018,184.84 920 | "Barton, Sauer and Adams",Volkman Inc,05/04/2018,208.08 921 | "Huels, Harvey and Luettgen",Gutkowski and Sons,06/27/2018,87.11 922 | "Murphy, Reynolds and Ondricka","Rutherford, Steuber and Dibbert",05/31/2018,83.96 923 | "Wunsch, Berge and McCullough","Krajcik, Walter and Herman",05/22/2018,101.36 924 | Bernier-Mueller,"Ledner, Lockman and Mosciski",05/27/2018,190.54 925 | O'Reilly-Conroy,"McGlynn, O'Kon and Reinger",06/10/2018,233.24 926 | Johnston-Wilkinson,Rolfson-Kling,04/01/2018,82.07 927 | "Bednar, Stiedemann and O'Keefe",Gerlach and Sons,06/03/2018,40.84 928 | Muller-Ernser,McKenzie and Sons,05/23/2018,207.61 929 | Emard-Kling,Buckridge Inc,06/14/2018,132.47 930 | Herman Inc,Toy-Price,05/25/2018,85.17 931 | Erdman Inc,Ernser-Lebsack,05/06/2018,148.44 932 | Homenick Inc,"Sawayn, Feeney and Altenwerth",05/17/2018,186.98 933 | Wisozk and Sons,Hessel LLC,05/27/2018,44.68 934 | "Ullrich, Hettinger and Wisoky",Bayer-Herzog,05/30/2018,69.54 935 | Kerluke-Renner,Ernser-Fahey,06/04/2018,180.80 936 | Ernser and Sons,Schroeder-Zemlak,06/08/2018,165.03 937 | "Orn, Nitzsche and Abshire",Rath and Sons,05/11/2018,132.21 938 | Sipes and Sons,Kovacek Group,04/13/2018,242.18 939 | "Koss, Cormier and Gorczany",Stiedemann-Kuhlman,06/24/2018,101.38 940 | "Gerhold, Gislason and Langworth","Mayer, Denesik and Kerluke",05/31/2018,163.84 941 | Gutkowski-Sanford,"Moen, Hettinger and Dickinson",06/12/2018,224.08 942 | Wehner Inc,Wilkinson Group,06/07/2018,208.88 943 | Lowe-Purdy,Pfannerstill LLC,06/01/2018,196.08 944 | Schaefer-Walker,"Graham, Rutherford and Schuppe",06/06/2018,222.61 945 | "Beahan, Wuckert and Lynch","Corwin, Nicolas and Kautzer",06/26/2018,85.93 946 | "Bergstrom, Bashirian and Mills","Stark, Bosco and Hartmann",06/26/2018,128.22 947 | White-Hyatt,"Welch, Ankunding and Gusikowski",06/24/2018,39.28 948 | Hyatt-Dare,Graham-Kunze,06/08/2018,96.39 949 | Batz Inc,Krajcik and Sons,06/24/2018,45.68 950 | Klocko and Sons,Ziemann Inc,05/17/2018,192.69 951 | "Gerlach, Terry and Erdman","Larson, Daugherty and Legros",06/02/2018,75.58 952 | "Shields, Hudson and Harber",Cronin-Gislason,06/27/2018,157.42 953 | Considine-Fadel,"Wolf, Barrows and Pfeffer",05/01/2018,133.94 954 | "Welch, Carroll and Kemmer","Lehner, Howell and Murazik",06/02/2018,241.48 955 | "Brekke, Zboncak and Jacobi",Stoltenberg-Connelly,05/29/2018,101.66 956 | Gutmann-Frami,Wyman Inc,06/03/2018,190.13 957 | Towne-Frami,Lind and Sons,05/26/2018,151.02 958 | "Rowe, Breitenberg and Mayer",Runolfsdottir-Lehner,05/12/2018,123.56 959 | "Ullrich, Gutkowski and Nicolas",Quitzon LLC,05/09/2018,115.94 960 | Tremblay-McCullough,Osinski-Auer,06/27/2018,97.23 961 | Wisozk Group,"Emmerich, Walsh and Stehr",05/02/2018,240.27 962 | Johnston-Pfannerstill,"Steuber, Kohler and Nienow",06/05/2018,205.12 963 | "Romaguera, Pfeffer and Reichert","Kshlerin, Deckow and Parisian",04/29/2018,200.50 964 | Yundt-Mohr,"Blick, Gleason and Cartwright",05/04/2018,199.53 965 | Daugherty Inc,Bradtke-Hegmann,05/13/2018,78.31 966 | Wiza and Sons,Shanahan and Sons,05/26/2018,37.73 967 | Berge-Mayer,Block Group,06/02/2018,91.88 968 | Jaskolski and Sons,Johnson-Strosin,06/18/2018,42.45 969 | "Ortiz, Lindgren and Schuppe",Kuphal Inc,05/15/2018,192.82 970 | Maggio-Gerhold,Mitchell-Cole,04/20/2018,170.99 971 | "Heidenreich, Skiles and Dickens","Wunsch, Conn and Jones",05/09/2018,91.62 972 | Muller-Tillman,Hansen-Auer,06/13/2018,180.96 973 | "Smitham, Kris and Legros",Bailey and Sons,04/25/2018,225.55 974 | Mertz-Lakin,Bogan Inc,04/24/2018,120.78 975 | "O'Connell, Turcotte and Stiedemann",Boehm Group,05/08/2018,106.17 976 | Nitzsche and Sons,"Schroeder, Abbott and Kris",04/10/2018,201.43 977 | Weimann and Sons,Mohr-Ullrich,06/17/2018,102.52 978 | Reynolds Inc,Rogahn-Hilpert,05/16/2018,242.19 979 | Spinka-Bogisich,Senger-Hoeger,05/26/2018,161.09 980 | "Oberbrunner, Parisian and Maggio","Welch, Lang and Breitenberg",06/21/2018,79.13 981 | Kreiger and Sons,Hilll-Parisian,05/11/2018,158.16 982 | Konopelski-Muller,"Schaefer, Howell and Frami",06/06/2018,58.87 983 | "Carroll, Luettgen and Wuckert",Turcotte-Ortiz,04/03/2018,194.60 984 | Sipes-Hane,Monahan LLC,06/16/2018,132.23 985 | Leuschke Group,"Weimann, Gusikowski and Tremblay",05/18/2018,101.70 986 | Torp-Grimes,Dicki Group,05/02/2018,92.45 987 | Bauch and Sons,"Cartwright, Gorczany and Heller",06/25/2018,159.81 988 | Turcotte LLC,Howell and Sons,05/26/2018,202.79 989 | "Becker, Jaskolski and Hyatt","Buckridge, Kunde and Smith",04/06/2018,145.05 990 | "Prosacco, Gerlach and Mayer",Tremblay-Kutch,04/09/2018,159.93 991 | Windler LLC,Renner Group,05/10/2018,106.10 992 | Keeling-Dickens,"Marks, Cremin and VonRueden",06/08/2018,65.89 993 | "Johnston, Skiles and Connelly",Collins-Satterfield,06/25/2018,67.64 994 | Crona-Gorczany,"Bins, Mueller and Gislason",04/03/2018,138.26 995 | Kub Inc,"Nikolaus, Jast and Bartell",06/06/2018,243.32 996 | "Lueilwitz, Davis and Wintheiser",Kohler LLC,04/17/2018,110.35 997 | Becker-Friesen,Cronin Group,04/12/2018,243.89 998 | "Goodwin, Hilll and Dibbert","Hegmann, Kirlin and Mosciski",04/23/2018,105.54 999 | Grady Group,Kunde and Sons,04/23/2018,62.34 1000 | "Kling, Hessel and Frami",Pollich-Heller,06/20/2018,150.98 1001 | -------------------------------------------------------------------------------- /course-lessons-project/project4-redshift-data-analysis/README.md: -------------------------------------------------------------------------------- 1 | # Creating a Redshift Cluster 2 | 3 | 1. Navigate to Redshift in the AWS console 4 | 2. Quick Launch a 1-node cluster 5 | 3. Install Postico 6 | 4. Install the [JDBC driver](https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html#download-jdbc-driver) 7 | 5. Copy Redshift JDBC url. e.g. `redshift-cluster-1.ccmcujfidyml.us-east-1.redshift.amazonaws.com` port `5439` and `dev` database 8 | 9 | # Compression in Redshift 10 | 11 | Automatic compression analysis requires enough rows in the load data (at least 100,000 rows per slice) to generate a meaningful sample. 12 | 13 | ```sql 14 | create table sales( 15 | salesid integer not null, 16 | listid integer not null distkey, 17 | sellerid integer not null, 18 | buyerid integer not null, 19 | eventid integer not null, 20 | dateid smallint not null sortkey, 21 | qtysold smallint not null, 22 | pricepaid decimal(8,2), 23 | commission decimal(8,2), 24 | saletime timestamp 25 | ); 26 | 27 | copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt' 28 | iam_role 'arn:aws:iam::123123123123:role/redshift-po' 29 | delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'us-west-2'; 30 | 31 | select "column", type, encoding, distkey, sortkey, "notnull" 32 | from pg_table_def 33 | where tablename = 'sales'; 34 | 35 | select * from sales limit 10; 36 | 37 | analyze compression sales; 38 | 39 | drop table sales; 40 | ``` 41 | 42 | # Distribution Styles 43 | 44 | ```sql 45 | create table adpubresults_all( 46 | _1 varchar(50), 47 | _2 date, 48 | _3 float 49 | ) 50 | diststyle all; 51 | 52 | create table adpubresults_datekey( 53 | _1 varchar(50), 54 | _2 date distkey, 55 | _3 float 56 | ); 57 | 58 | select "column", type, encoding, distkey, sortkey, "notnull" 59 | from pg_table_def 60 | where tablename = 'sales'; 61 | 62 | copy adpubresults 63 | from 's3://penguin-outfitters-adpubdata/adPubResultsjson/' 64 | iam_role 'arn:aws:iam::123123123123:role/redshift-po' 65 | dateformat as 'MM/DD/YYYY' 66 | json 'auto'; 67 | 68 | select * from adpubresults limit 100; 69 | 70 | select * from stl_load_errors limit 1; 71 | ``` 72 | 73 | # Sort Keys 74 | 75 | ```sql 76 | create table iotstreamdata( 77 | station varchar(16), 78 | name varchar(50), 79 | latitude decimal, 80 | longitude decimal, 81 | elevation decimal, 82 | date_measured distkey sortkey date, 83 | precipitation decimal, 84 | snowfall decimal, 85 | snow_depth decimal, 86 | average_temperature int, 87 | max_temperature int, 88 | min_temperature int 89 | ) 90 | -- compound sortkey(listid,sellerid); 91 | -- interleaved sortkey (c_custkey, c_city, c_mktsegment); 92 | ; 93 | 94 | copy iotstreamdata 95 | from 's3://big-data-iot-2018-la/2018/' 96 | iam_role 'arn:aws:iam::123123123123:role/redshift-po' 97 | dateformat as 'YYYY-MM-DD' 98 | json 'auto'; 99 | ``` 100 | 101 | Create a table in the cluster and use all these things 102 | 103 | # Unload and Copy 104 | 105 | ```sql 106 | unload (' 107 | select * from ( 108 | select 109 | date_measured, 110 | max_temperature 111 | from iotstreamdata 112 | order by max_temperature desc 113 | limit 10 114 | ) 115 | ') 116 | to 's3://penguin-orders-export-2018/redshiftunloads/maxtemps_' 117 | iam_role 'arn:aws:iam::123123123123:role/redshift-po'; 118 | 119 | unload (' 120 | select 121 | date_measured, 122 | max_temperature 123 | from iotstreamdata 124 | where date_measured between \'2018-04-01\' and \'2018-04-07\' 125 | order by date_measured 126 | ') 127 | to 's3://penguin-orders-export-2018/redshiftunloads/aprilmaxtemp_' 128 | iam_role 'arn:aws:iam::123123123123:role/redshift-po' 129 | ``` 130 | 131 | 132 | -------------------------------------------------------------------------------- /course-lessons-project/project5-js-visualizations/README.md: -------------------------------------------------------------------------------- 1 | # D3 JS 2 | 3 | ## Load the data from S3 4 | 5 | 1. Make the JSON file public 6 | 2. Update CORS settings on the bucket 7 | 8 | ```xml 9 | 10 | 11 | * 12 | 13 | GET 14 | PUT 15 | POST 16 | DELETE 17 | 18 | * 19 | 20 | 21 | ``` 22 | 23 | 3. Modify the location of the data in the html files -------------------------------------------------------------------------------- /course-lessons-project/project5-js-visualizations/top-ten-highcharts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /course-lessons-project/project5-js-visualizations/top-ten.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /data/README.txt: -------------------------------------------------------------------------------- 1 | NASA-HTTP 2 | 3 | Description 4 | These two traces contain two month's worth of all HTTP requests to the NASA Kennedy Space Center WWW server in Florida. 5 | Format 6 | The logs are an ASCII file with one line per request, with the following columns: 7 | host making the request. A hostname when possible, otherwise the Internet address if the name could not be looked up. 8 | timestamp in the format "DAY MON DD HH:MM:SS YYYY", where DAY is the day of the week, MON is the name of the month, DD is the day of the month, HH:MM:SS is the time of day using a 24-hour clock, and YYYY is the year. The timezone is -0400. 9 | request given in quotes. 10 | HTTP reply code. 11 | bytes in the reply. 12 | Measurement 13 | The first log was collected from 00:00:00 July 1, 1995 through 23:59:59 July 31, 1995, a total of 31 days. The second log was collected from 00:00:00 August 1, 1995 through 23:59:59 Agust 31, 1995, a total of 7 days. In this two week period there were 3,461,612 requests. Timestamps have 1 second resolution. Note that from 01/Aug/1995:14:52:01 until 03/Aug/1995:04:36:13 there are no accesses recorded, as the Web server was shut down, due to Hurricane Erin. 14 | Privacy 15 | The logs fully preserve the originating host and HTTP request. Please do not however attempt any analysis beyond general traffic patterns. 16 | Acknowledgements 17 | The logs was collected by Jim Dumoulin of the Kennedy Space Center, and contributed by Martin Arlitt (mfa126@cs.usask.ca) and Carey Williamson (carey@cs.usask.ca) of the University of Saskatchewan. 18 | Publications 19 | This is one of six data sets analyzed in an upcoming paper by 20 | M. Arlitt and C. Williamson, entitled ``Web Server Workload Characterization: The Search for Invariants'', to appear in the proceedings of the 1996 ACM SIGMETRICS Conference on the Measurement and Modeling of Computer Systems, Philadelphia, PA, May 23-26, 1996. An extended version of this paper is available on-line; see also the DISCUS home page and the group's publications. 21 | Related 22 | Permission has been granted to make four of the six data sets discussed in ``Web Server Workload Characterization: The Search for Invariants'' available. The four data sets are: Calgary-HTTP , ClarkNet-HTTP , NASA-HTTP , and Saskatchewan-HTTP . 23 | Restrictions 24 | The traces may be freely redistributed. 25 | Distribution 26 | Available from the Archive in Jul 01 to Jul 31, ASCII format, 20.7 MB gzip compressed, 205.2 MB uncompressed, and Aug 04 to Aug 31, ASCII format, 21.8 MB gzip compressed, 167.8 MB uncompressed. 27 | 28 | 29 | Up to Traces In The Internet Traffic Archive. 30 | -------------------------------------------------------------------------------- /dms/mysql-privs.sql: -------------------------------------------------------------------------------- 1 | GRANT ALL ON *.* TO src@'%' IDENTIFIED BY 'password'; 2 | GRANT ALL ON *.* TO dst@'%' IDENTIFIED BY 'password'; 3 | FLUSH PRIVILEGES 4 | -------------------------------------------------------------------------------- /dms/sakila-schema.sql: -------------------------------------------------------------------------------- 1 | -- Sakila Sample Database Schema 2 | -- Version 1.0 3 | 4 | -- Copyright (c) 2006, 2015, Oracle and/or its affiliates. 5 | -- All rights reserved. 6 | 7 | -- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 8 | 9 | -- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 10 | -- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 11 | -- * Neither the name of Oracle nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 12 | 13 | -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 14 | 15 | SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 16 | SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 17 | SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; 18 | 19 | DROP SCHEMA IF EXISTS sakila; 20 | CREATE SCHEMA sakila; 21 | USE sakila; 22 | 23 | -- 24 | -- Table structure for table `actor` 25 | -- 26 | 27 | CREATE TABLE actor ( 28 | actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 29 | first_name VARCHAR(45) NOT NULL, 30 | last_name VARCHAR(45) NOT NULL, 31 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 32 | PRIMARY KEY (actor_id), 33 | KEY idx_actor_last_name (last_name) 34 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 35 | 36 | -- 37 | -- Table structure for table `address` 38 | -- 39 | 40 | CREATE TABLE address ( 41 | address_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 42 | address VARCHAR(50) NOT NULL, 43 | address2 VARCHAR(50) DEFAULT NULL, 44 | district VARCHAR(20) NOT NULL, 45 | city_id SMALLINT UNSIGNED NOT NULL, 46 | postal_code VARCHAR(10) DEFAULT NULL, 47 | phone VARCHAR(20) NOT NULL, 48 | /*!50705 location GEOMETRY NOT NULL,*/ 49 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 50 | PRIMARY KEY (address_id), 51 | KEY idx_fk_city_id (city_id), 52 | /*!50705 SPATIAL KEY `idx_location` (location),*/ 53 | CONSTRAINT `fk_address_city` FOREIGN KEY (city_id) REFERENCES city (city_id) ON DELETE RESTRICT ON UPDATE CASCADE 54 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 55 | 56 | -- 57 | -- Table structure for table `category` 58 | -- 59 | 60 | CREATE TABLE category ( 61 | category_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 62 | name VARCHAR(25) NOT NULL, 63 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 64 | PRIMARY KEY (category_id) 65 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 66 | 67 | -- 68 | -- Table structure for table `city` 69 | -- 70 | 71 | CREATE TABLE city ( 72 | city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 73 | city VARCHAR(50) NOT NULL, 74 | country_id SMALLINT UNSIGNED NOT NULL, 75 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 76 | PRIMARY KEY (city_id), 77 | KEY idx_fk_country_id (country_id), 78 | CONSTRAINT `fk_city_country` FOREIGN KEY (country_id) REFERENCES country (country_id) ON DELETE RESTRICT ON UPDATE CASCADE 79 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 80 | 81 | -- 82 | -- Table structure for table `country` 83 | -- 84 | 85 | CREATE TABLE country ( 86 | country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 87 | country VARCHAR(50) NOT NULL, 88 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 89 | PRIMARY KEY (country_id) 90 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 91 | 92 | -- 93 | -- Table structure for table `customer` 94 | -- 95 | 96 | CREATE TABLE customer ( 97 | customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 98 | store_id TINYINT UNSIGNED NOT NULL, 99 | first_name VARCHAR(45) NOT NULL, 100 | last_name VARCHAR(45) NOT NULL, 101 | email VARCHAR(50) DEFAULT NULL, 102 | address_id SMALLINT UNSIGNED NOT NULL, 103 | active BOOLEAN NOT NULL DEFAULT TRUE, 104 | create_date DATETIME NOT NULL, 105 | last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 106 | PRIMARY KEY (customer_id), 107 | KEY idx_fk_store_id (store_id), 108 | KEY idx_fk_address_id (address_id), 109 | KEY idx_last_name (last_name), 110 | CONSTRAINT fk_customer_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE, 111 | CONSTRAINT fk_customer_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE RESTRICT ON UPDATE CASCADE 112 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 113 | 114 | -- 115 | -- Table structure for table `film` 116 | -- 117 | 118 | CREATE TABLE film ( 119 | film_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 120 | title VARCHAR(255) NOT NULL, 121 | description TEXT DEFAULT NULL, 122 | release_year YEAR DEFAULT NULL, 123 | language_id TINYINT UNSIGNED NOT NULL, 124 | original_language_id TINYINT UNSIGNED DEFAULT NULL, 125 | rental_duration TINYINT UNSIGNED NOT NULL DEFAULT 3, 126 | rental_rate DECIMAL(4,2) NOT NULL DEFAULT 4.99, 127 | length SMALLINT UNSIGNED DEFAULT NULL, 128 | replacement_cost DECIMAL(5,2) NOT NULL DEFAULT 19.99, 129 | rating ENUM('G','PG','PG-13','R','NC-17') DEFAULT 'G', 130 | special_features SET('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') DEFAULT NULL, 131 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 132 | PRIMARY KEY (film_id), 133 | KEY idx_title (title), 134 | KEY idx_fk_language_id (language_id), 135 | KEY idx_fk_original_language_id (original_language_id), 136 | CONSTRAINT fk_film_language FOREIGN KEY (language_id) REFERENCES language (language_id) ON DELETE RESTRICT ON UPDATE CASCADE, 137 | CONSTRAINT fk_film_language_original FOREIGN KEY (original_language_id) REFERENCES language (language_id) ON DELETE RESTRICT ON UPDATE CASCADE 138 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 139 | 140 | -- 141 | -- Table structure for table `film_actor` 142 | -- 143 | 144 | CREATE TABLE film_actor ( 145 | actor_id SMALLINT UNSIGNED NOT NULL, 146 | film_id SMALLINT UNSIGNED NOT NULL, 147 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 148 | PRIMARY KEY (actor_id,film_id), 149 | KEY idx_fk_film_id (`film_id`), 150 | CONSTRAINT fk_film_actor_actor FOREIGN KEY (actor_id) REFERENCES actor (actor_id) ON DELETE RESTRICT ON UPDATE CASCADE, 151 | CONSTRAINT fk_film_actor_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE RESTRICT ON UPDATE CASCADE 152 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 153 | 154 | -- 155 | -- Table structure for table `film_category` 156 | -- 157 | 158 | CREATE TABLE film_category ( 159 | film_id SMALLINT UNSIGNED NOT NULL, 160 | category_id TINYINT UNSIGNED NOT NULL, 161 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 162 | PRIMARY KEY (film_id, category_id), 163 | CONSTRAINT fk_film_category_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE RESTRICT ON UPDATE CASCADE, 164 | CONSTRAINT fk_film_category_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON DELETE RESTRICT ON UPDATE CASCADE 165 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 166 | 167 | -- 168 | -- Table structure for table `film_text` 169 | -- 170 | -- InnoDB added FULLTEXT support in 5.6.10. If you use an 171 | -- earlier version, then consider upgrading (recommended) or 172 | -- changing InnoDB to MyISAM as the film_text engine 173 | -- 174 | 175 | CREATE TABLE film_text ( 176 | film_id SMALLINT NOT NULL, 177 | title VARCHAR(255) NOT NULL, 178 | description TEXT, 179 | PRIMARY KEY (film_id) 180 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 181 | 182 | -- 183 | -- Triggers for loading film_text from film 184 | -- 185 | 186 | DELIMITER ;; 187 | CREATE TRIGGER `ins_film` AFTER INSERT ON `film` FOR EACH ROW BEGIN 188 | INSERT INTO film_text (film_id, title, description) 189 | VALUES (new.film_id, new.title, new.description); 190 | END;; 191 | 192 | 193 | CREATE TRIGGER `upd_film` AFTER UPDATE ON `film` FOR EACH ROW BEGIN 194 | IF (old.title != new.title) OR (old.description != new.description) OR (old.film_id != new.film_id) 195 | THEN 196 | UPDATE film_text 197 | SET title=new.title, 198 | description=new.description, 199 | film_id=new.film_id 200 | WHERE film_id=old.film_id; 201 | END IF; 202 | END;; 203 | 204 | 205 | CREATE TRIGGER `del_film` AFTER DELETE ON `film` FOR EACH ROW BEGIN 206 | DELETE FROM film_text WHERE film_id = old.film_id; 207 | END;; 208 | 209 | DELIMITER ; 210 | 211 | -- 212 | -- Table structure for table `inventory` 213 | -- 214 | 215 | CREATE TABLE inventory ( 216 | inventory_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 217 | film_id SMALLINT UNSIGNED NOT NULL, 218 | store_id TINYINT UNSIGNED NOT NULL, 219 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 220 | PRIMARY KEY (inventory_id), 221 | KEY idx_fk_film_id (film_id), 222 | KEY idx_store_id_film_id (store_id,film_id), 223 | CONSTRAINT fk_inventory_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE RESTRICT ON UPDATE CASCADE, 224 | CONSTRAINT fk_inventory_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE RESTRICT ON UPDATE CASCADE 225 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 226 | 227 | -- 228 | -- Table structure for table `language` 229 | -- 230 | 231 | CREATE TABLE language ( 232 | language_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 233 | name CHAR(20) NOT NULL, 234 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 235 | PRIMARY KEY (language_id) 236 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 237 | 238 | -- 239 | -- Table structure for table `payment` 240 | -- 241 | 242 | CREATE TABLE payment ( 243 | payment_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 244 | customer_id SMALLINT UNSIGNED NOT NULL, 245 | staff_id TINYINT UNSIGNED NOT NULL, 246 | rental_id INT DEFAULT NULL, 247 | amount DECIMAL(5,2) NOT NULL, 248 | payment_date DATETIME NOT NULL, 249 | last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 250 | PRIMARY KEY (payment_id), 251 | KEY idx_fk_staff_id (staff_id), 252 | KEY idx_fk_customer_id (customer_id), 253 | CONSTRAINT fk_payment_rental FOREIGN KEY (rental_id) REFERENCES rental (rental_id) ON DELETE SET NULL ON UPDATE CASCADE, 254 | CONSTRAINT fk_payment_customer FOREIGN KEY (customer_id) REFERENCES customer (customer_id) ON DELETE RESTRICT ON UPDATE CASCADE, 255 | CONSTRAINT fk_payment_staff FOREIGN KEY (staff_id) REFERENCES staff (staff_id) ON DELETE RESTRICT ON UPDATE CASCADE 256 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 257 | 258 | 259 | -- 260 | -- Table structure for table `rental` 261 | -- 262 | 263 | CREATE TABLE rental ( 264 | rental_id INT NOT NULL AUTO_INCREMENT, 265 | rental_date DATETIME NOT NULL, 266 | inventory_id MEDIUMINT UNSIGNED NOT NULL, 267 | customer_id SMALLINT UNSIGNED NOT NULL, 268 | return_date DATETIME DEFAULT NULL, 269 | staff_id TINYINT UNSIGNED NOT NULL, 270 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 271 | PRIMARY KEY (rental_id), 272 | UNIQUE KEY (rental_date,inventory_id,customer_id), 273 | KEY idx_fk_inventory_id (inventory_id), 274 | KEY idx_fk_customer_id (customer_id), 275 | KEY idx_fk_staff_id (staff_id), 276 | CONSTRAINT fk_rental_staff FOREIGN KEY (staff_id) REFERENCES staff (staff_id) ON DELETE RESTRICT ON UPDATE CASCADE, 277 | CONSTRAINT fk_rental_inventory FOREIGN KEY (inventory_id) REFERENCES inventory (inventory_id) ON DELETE RESTRICT ON UPDATE CASCADE, 278 | CONSTRAINT fk_rental_customer FOREIGN KEY (customer_id) REFERENCES customer (customer_id) ON DELETE RESTRICT ON UPDATE CASCADE 279 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 280 | 281 | -- 282 | -- Table structure for table `staff` 283 | -- 284 | 285 | CREATE TABLE staff ( 286 | staff_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 287 | first_name VARCHAR(45) NOT NULL, 288 | last_name VARCHAR(45) NOT NULL, 289 | address_id SMALLINT UNSIGNED NOT NULL, 290 | picture BLOB DEFAULT NULL, 291 | email VARCHAR(50) DEFAULT NULL, 292 | store_id TINYINT UNSIGNED NOT NULL, 293 | active BOOLEAN NOT NULL DEFAULT TRUE, 294 | username VARCHAR(16) NOT NULL, 295 | password VARCHAR(40) BINARY DEFAULT NULL, 296 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 297 | PRIMARY KEY (staff_id), 298 | KEY idx_fk_store_id (store_id), 299 | KEY idx_fk_address_id (address_id), 300 | CONSTRAINT fk_staff_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE RESTRICT ON UPDATE CASCADE, 301 | CONSTRAINT fk_staff_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE 302 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 303 | 304 | -- 305 | -- Table structure for table `store` 306 | -- 307 | 308 | CREATE TABLE store ( 309 | store_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 310 | manager_staff_id TINYINT UNSIGNED NOT NULL, 311 | address_id SMALLINT UNSIGNED NOT NULL, 312 | last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 313 | PRIMARY KEY (store_id), 314 | UNIQUE KEY idx_unique_manager (manager_staff_id), 315 | KEY idx_fk_address_id (address_id), 316 | CONSTRAINT fk_store_staff FOREIGN KEY (manager_staff_id) REFERENCES staff (staff_id) ON DELETE RESTRICT ON UPDATE CASCADE, 317 | CONSTRAINT fk_store_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE 318 | )ENGINE=InnoDB DEFAULT CHARSET=utf8; 319 | 320 | -- 321 | -- View structure for view `customer_list` 322 | -- 323 | 324 | CREATE VIEW customer_list 325 | AS 326 | SELECT cu.customer_id AS ID, CONCAT(cu.first_name, _utf8' ', cu.last_name) AS name, a.address AS address, a.postal_code AS `zip code`, 327 | a.phone AS phone, city.city AS city, country.country AS country, IF(cu.active, _utf8'active',_utf8'') AS notes, cu.store_id AS SID 328 | FROM customer AS cu JOIN address AS a ON cu.address_id = a.address_id JOIN city ON a.city_id = city.city_id 329 | JOIN country ON city.country_id = country.country_id; 330 | 331 | -- 332 | -- View structure for view `film_list` 333 | -- 334 | 335 | CREATE VIEW film_list 336 | AS 337 | SELECT film.film_id AS FID, film.title AS title, film.description AS description, category.name AS category, film.rental_rate AS price, 338 | film.length AS length, film.rating AS rating, GROUP_CONCAT(CONCAT(actor.first_name, _utf8' ', actor.last_name) SEPARATOR ', ') AS actors 339 | FROM category LEFT JOIN film_category ON category.category_id = film_category.category_id LEFT JOIN film ON film_category.film_id = film.film_id 340 | JOIN film_actor ON film.film_id = film_actor.film_id 341 | JOIN actor ON film_actor.actor_id = actor.actor_id 342 | GROUP BY film.film_id, category.name; 343 | 344 | -- 345 | -- View structure for view `nicer_but_slower_film_list` 346 | -- 347 | 348 | CREATE VIEW nicer_but_slower_film_list 349 | AS 350 | SELECT film.film_id AS FID, film.title AS title, film.description AS description, category.name AS category, film.rental_rate AS price, 351 | film.length AS length, film.rating AS rating, GROUP_CONCAT(CONCAT(CONCAT(UCASE(SUBSTR(actor.first_name,1,1)), 352 | LCASE(SUBSTR(actor.first_name,2,LENGTH(actor.first_name))),_utf8' ',CONCAT(UCASE(SUBSTR(actor.last_name,1,1)), 353 | LCASE(SUBSTR(actor.last_name,2,LENGTH(actor.last_name)))))) SEPARATOR ', ') AS actors 354 | FROM category LEFT JOIN film_category ON category.category_id = film_category.category_id LEFT JOIN film ON film_category.film_id = film.film_id 355 | JOIN film_actor ON film.film_id = film_actor.film_id 356 | JOIN actor ON film_actor.actor_id = actor.actor_id 357 | GROUP BY film.film_id, category.name; 358 | 359 | -- 360 | -- View structure for view `staff_list` 361 | -- 362 | 363 | CREATE VIEW staff_list 364 | AS 365 | SELECT s.staff_id AS ID, CONCAT(s.first_name, _utf8' ', s.last_name) AS name, a.address AS address, a.postal_code AS `zip code`, a.phone AS phone, 366 | city.city AS city, country.country AS country, s.store_id AS SID 367 | FROM staff AS s JOIN address AS a ON s.address_id = a.address_id JOIN city ON a.city_id = city.city_id 368 | JOIN country ON city.country_id = country.country_id; 369 | 370 | -- 371 | -- View structure for view `sales_by_store` 372 | -- 373 | 374 | CREATE VIEW sales_by_store 375 | AS 376 | SELECT 377 | CONCAT(c.city, _utf8',', cy.country) AS store 378 | , CONCAT(m.first_name, _utf8' ', m.last_name) AS manager 379 | , SUM(p.amount) AS total_sales 380 | FROM payment AS p 381 | INNER JOIN rental AS r ON p.rental_id = r.rental_id 382 | INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id 383 | INNER JOIN store AS s ON i.store_id = s.store_id 384 | INNER JOIN address AS a ON s.address_id = a.address_id 385 | INNER JOIN city AS c ON a.city_id = c.city_id 386 | INNER JOIN country AS cy ON c.country_id = cy.country_id 387 | INNER JOIN staff AS m ON s.manager_staff_id = m.staff_id 388 | GROUP BY s.store_id 389 | ORDER BY cy.country, c.city; 390 | 391 | -- 392 | -- View structure for view `sales_by_film_category` 393 | -- 394 | -- Note that total sales will add up to >100% because 395 | -- some titles belong to more than 1 category 396 | -- 397 | 398 | CREATE VIEW sales_by_film_category 399 | AS 400 | SELECT 401 | c.name AS category 402 | , SUM(p.amount) AS total_sales 403 | FROM payment AS p 404 | INNER JOIN rental AS r ON p.rental_id = r.rental_id 405 | INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id 406 | INNER JOIN film AS f ON i.film_id = f.film_id 407 | INNER JOIN film_category AS fc ON f.film_id = fc.film_id 408 | INNER JOIN category AS c ON fc.category_id = c.category_id 409 | GROUP BY c.name 410 | ORDER BY total_sales DESC; 411 | 412 | -- 413 | -- View structure for view `actor_info` 414 | -- 415 | 416 | CREATE DEFINER=CURRENT_USER SQL SECURITY INVOKER VIEW actor_info 417 | AS 418 | SELECT 419 | a.actor_id, 420 | a.first_name, 421 | a.last_name, 422 | GROUP_CONCAT(DISTINCT CONCAT(c.name, ': ', 423 | (SELECT GROUP_CONCAT(f.title ORDER BY f.title SEPARATOR ', ') 424 | FROM sakila.film f 425 | INNER JOIN sakila.film_category fc 426 | ON f.film_id = fc.film_id 427 | INNER JOIN sakila.film_actor fa 428 | ON f.film_id = fa.film_id 429 | WHERE fc.category_id = c.category_id 430 | AND fa.actor_id = a.actor_id 431 | ) 432 | ) 433 | ORDER BY c.name SEPARATOR '; ') 434 | AS film_info 435 | FROM sakila.actor a 436 | LEFT JOIN sakila.film_actor fa 437 | ON a.actor_id = fa.actor_id 438 | LEFT JOIN sakila.film_category fc 439 | ON fa.film_id = fc.film_id 440 | LEFT JOIN sakila.category c 441 | ON fc.category_id = c.category_id 442 | GROUP BY a.actor_id, a.first_name, a.last_name; 443 | 444 | -- 445 | -- Procedure structure for procedure `rewards_report` 446 | -- 447 | 448 | DELIMITER // 449 | 450 | CREATE PROCEDURE rewards_report ( 451 | IN min_monthly_purchases TINYINT UNSIGNED 452 | , IN min_dollar_amount_purchased DECIMAL(10,2) UNSIGNED 453 | , OUT count_rewardees INT 454 | ) 455 | LANGUAGE SQL 456 | NOT DETERMINISTIC 457 | READS SQL DATA 458 | SQL SECURITY DEFINER 459 | COMMENT 'Provides a customizable report on best customers' 460 | proc: BEGIN 461 | 462 | DECLARE last_month_start DATE; 463 | DECLARE last_month_end DATE; 464 | 465 | /* Some sanity checks... */ 466 | IF min_monthly_purchases = 0 THEN 467 | SELECT 'Minimum monthly purchases parameter must be > 0'; 468 | LEAVE proc; 469 | END IF; 470 | IF min_dollar_amount_purchased = 0.00 THEN 471 | SELECT 'Minimum monthly dollar amount purchased parameter must be > $0.00'; 472 | LEAVE proc; 473 | END IF; 474 | 475 | /* Determine start and end time periods */ 476 | SET last_month_start = DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH); 477 | SET last_month_start = STR_TO_DATE(CONCAT(YEAR(last_month_start),'-',MONTH(last_month_start),'-01'),'%Y-%m-%d'); 478 | SET last_month_end = LAST_DAY(last_month_start); 479 | 480 | /* 481 | Create a temporary storage area for 482 | Customer IDs. 483 | */ 484 | CREATE TEMPORARY TABLE tmpCustomer (customer_id SMALLINT UNSIGNED NOT NULL PRIMARY KEY); 485 | 486 | /* 487 | Find all customers meeting the 488 | monthly purchase requirements 489 | */ 490 | INSERT INTO tmpCustomer (customer_id) 491 | SELECT p.customer_id 492 | FROM payment AS p 493 | WHERE DATE(p.payment_date) BETWEEN last_month_start AND last_month_end 494 | GROUP BY customer_id 495 | HAVING SUM(p.amount) > min_dollar_amount_purchased 496 | AND COUNT(customer_id) > min_monthly_purchases; 497 | 498 | /* Populate OUT parameter with count of found customers */ 499 | SELECT COUNT(*) FROM tmpCustomer INTO count_rewardees; 500 | 501 | /* 502 | Output ALL customer information of matching rewardees. 503 | Customize output as needed. 504 | */ 505 | SELECT c.* 506 | FROM tmpCustomer AS t 507 | INNER JOIN customer AS c ON t.customer_id = c.customer_id; 508 | 509 | /* Clean up */ 510 | DROP TABLE tmpCustomer; 511 | END // 512 | 513 | DELIMITER ; 514 | 515 | DELIMITER $$ 516 | 517 | CREATE FUNCTION get_customer_balance(p_customer_id INT, p_effective_date DATETIME) RETURNS DECIMAL(5,2) 518 | DETERMINISTIC 519 | READS SQL DATA 520 | BEGIN 521 | 522 | #OK, WE NEED TO CALCULATE THE CURRENT BALANCE GIVEN A CUSTOMER_ID AND A DATE 523 | #THAT WE WANT THE BALANCE TO BE EFFECTIVE FOR. THE BALANCE IS: 524 | # 1) RENTAL FEES FOR ALL PREVIOUS RENTALS 525 | # 2) ONE DOLLAR FOR EVERY DAY THE PREVIOUS RENTALS ARE OVERDUE 526 | # 3) IF A FILM IS MORE THAN RENTAL_DURATION * 2 OVERDUE, CHARGE THE REPLACEMENT_COST 527 | # 4) SUBTRACT ALL PAYMENTS MADE BEFORE THE DATE SPECIFIED 528 | 529 | DECLARE v_rentfees DECIMAL(5,2); #FEES PAID TO RENT THE VIDEOS INITIALLY 530 | DECLARE v_overfees INTEGER; #LATE FEES FOR PRIOR RENTALS 531 | DECLARE v_payments DECIMAL(5,2); #SUM OF PAYMENTS MADE PREVIOUSLY 532 | 533 | SELECT IFNULL(SUM(film.rental_rate),0) INTO v_rentfees 534 | FROM film, inventory, rental 535 | WHERE film.film_id = inventory.film_id 536 | AND inventory.inventory_id = rental.inventory_id 537 | AND rental.rental_date <= p_effective_date 538 | AND rental.customer_id = p_customer_id; 539 | 540 | SELECT IFNULL(SUM(IF((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) > film.rental_duration, 541 | ((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) - film.rental_duration),0)),0) INTO v_overfees 542 | FROM rental, inventory, film 543 | WHERE film.film_id = inventory.film_id 544 | AND inventory.inventory_id = rental.inventory_id 545 | AND rental.rental_date <= p_effective_date 546 | AND rental.customer_id = p_customer_id; 547 | 548 | 549 | SELECT IFNULL(SUM(payment.amount),0) INTO v_payments 550 | FROM payment 551 | 552 | WHERE payment.payment_date <= p_effective_date 553 | AND payment.customer_id = p_customer_id; 554 | 555 | RETURN v_rentfees + v_overfees - v_payments; 556 | END $$ 557 | 558 | DELIMITER ; 559 | 560 | DELIMITER $$ 561 | 562 | CREATE PROCEDURE film_in_stock(IN p_film_id INT, IN p_store_id INT, OUT p_film_count INT) 563 | READS SQL DATA 564 | BEGIN 565 | SELECT inventory_id 566 | FROM inventory 567 | WHERE film_id = p_film_id 568 | AND store_id = p_store_id 569 | AND inventory_in_stock(inventory_id); 570 | 571 | SELECT FOUND_ROWS() INTO p_film_count; 572 | END $$ 573 | 574 | DELIMITER ; 575 | 576 | DELIMITER $$ 577 | 578 | CREATE PROCEDURE film_not_in_stock(IN p_film_id INT, IN p_store_id INT, OUT p_film_count INT) 579 | READS SQL DATA 580 | BEGIN 581 | SELECT inventory_id 582 | FROM inventory 583 | WHERE film_id = p_film_id 584 | AND store_id = p_store_id 585 | AND NOT inventory_in_stock(inventory_id); 586 | 587 | SELECT FOUND_ROWS() INTO p_film_count; 588 | END $$ 589 | 590 | DELIMITER ; 591 | 592 | DELIMITER $$ 593 | 594 | CREATE FUNCTION inventory_held_by_customer(p_inventory_id INT) RETURNS INT 595 | READS SQL DATA 596 | BEGIN 597 | DECLARE v_customer_id INT; 598 | DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL; 599 | 600 | SELECT customer_id INTO v_customer_id 601 | FROM rental 602 | WHERE return_date IS NULL 603 | AND inventory_id = p_inventory_id; 604 | 605 | RETURN v_customer_id; 606 | END $$ 607 | 608 | DELIMITER ; 609 | 610 | DELIMITER $$ 611 | 612 | CREATE FUNCTION inventory_in_stock(p_inventory_id INT) RETURNS BOOLEAN 613 | READS SQL DATA 614 | BEGIN 615 | DECLARE v_rentals INT; 616 | DECLARE v_out INT; 617 | 618 | #AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE 619 | #FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED 620 | 621 | SELECT COUNT(*) INTO v_rentals 622 | FROM rental 623 | WHERE inventory_id = p_inventory_id; 624 | 625 | IF v_rentals = 0 THEN 626 | RETURN TRUE; 627 | END IF; 628 | 629 | SELECT COUNT(rental_id) INTO v_out 630 | FROM inventory LEFT JOIN rental USING(inventory_id) 631 | WHERE inventory.inventory_id = p_inventory_id 632 | AND rental.return_date IS NULL; 633 | 634 | IF v_out > 0 THEN 635 | RETURN FALSE; 636 | ELSE 637 | RETURN TRUE; 638 | END IF; 639 | END $$ 640 | 641 | DELIMITER ; 642 | 643 | SET SQL_MODE=@OLD_SQL_MODE; 644 | SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; 645 | SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; 646 | 647 | 648 | -------------------------------------------------------------------------------- /dynamodb-lab/dynamodb.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function # Python 2/3 compatibility 2 | import boto3 3 | import json 4 | import decimal 5 | import sys 6 | from time import sleep 7 | 8 | dynamodb = boto3.resource('dynamodb', region_name='us-east-1', ) 9 | 10 | 11 | table = dynamodb.create_table( 12 | TableName='Movies', 13 | KeySchema=[ 14 | { 15 | 'AttributeName': 'year', 16 | 'KeyType': 'HASH' #Partition key 17 | }, 18 | { 19 | 'AttributeName': 'title', 20 | 'KeyType': 'RANGE' #Sort key 21 | } 22 | ], 23 | AttributeDefinitions=[ 24 | { 25 | 'AttributeName': 'year', 26 | 'AttributeType': 'N' 27 | }, 28 | { 29 | 'AttributeName': 'title', 30 | 'AttributeType': 'S' 31 | }, 32 | 33 | ], 34 | ProvisionedThroughput={ 35 | 'ReadCapacityUnits': 5, 36 | 'WriteCapacityUnits': 5 37 | } 38 | ) 39 | 40 | # Wait until the table exists. 41 | table.meta.client.get_waiter('table_exists').wait(TableName='Movies') 42 | 43 | table = dynamodb.Table('Movies') 44 | 45 | i = 0 46 | with open("/home/linuxacademy/moviedata.json") as json_file: 47 | 48 | movies = json.load(json_file, parse_float = decimal.Decimal) 49 | for movie in movies: 50 | i = i + 1 51 | if i == 100: 52 | sys.exit() 53 | year = int(movie['year']) 54 | title = movie['title'] 55 | info = movie['info'] 56 | 57 | print("Adding movie:", year, title) 58 | 59 | table.put_item( 60 | Item={ 61 | 'year': year, 62 | 'title': title, 63 | 'info': info, 64 | } 65 | ) 66 | sleep(.1) 67 | -------------------------------------------------------------------------------- /es-lab/firehose-delivery.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import boto3 3 | import random 4 | import time 5 | import json 6 | 7 | DeliveryStreamName = 'linuxacademy-courses' 8 | 9 | client = boto3.client('firehose') 10 | 11 | 12 | 13 | courses = [ 14 | "Linux+ LPIC Level 1 Exam 1", 15 | "Linux+ LPIC Level 1 Exam 2", 16 | "LPIC Level 2 Exam 201", 17 | "Mastering The Linux Command Line", 18 | "AWS Certified Developer - A ", 19 | "AWS Certified SysOps Administrator - A", 20 | "Introduction To Android Development", 21 | "OpenStack Essentials", 22 | "Learning Chef DevOps Deployment", 23 | "Docker Deep Dive ", 24 | "AWS Certified DevOps Engineer - Pro", 25 | "Git and Git lab - Start to Finish", 26 | "Learning Vagrant ", 27 | "Linux Essentials Certification", 28 | "Nginx And The LEMP Stack", 29 | "Linux Security Essentials", 30 | "Jenkins and Build Automation", 31 | "AWS Certified Solutions Architect - A", 32 | "AWS Certified Solutions Architect - Pro", 33 | "DevOps Essentials", 34 | "OpenStack MCA100 - Associates Certification", 35 | "Apache Tomcat 8 Application Server", 36 | "SQL Primer", 37 | "Apache JBOSS Administration", 38 | "Learning Python 2.7 Development", 39 | "Machine Learning with Azure", 40 | "Amazon Machine Learning", 41 | "Azure IoT Essentials", 42 | "Nagios Certified Professional" 43 | ] 44 | 45 | 46 | 47 | 48 | dt = datetime.datetime(2017, 03, 01) 49 | end = datetime.datetime(2017, 03, 07, 23, 59, 59) 50 | step = datetime.timedelta(seconds=300) 51 | 52 | record = {} 53 | 54 | while dt < end: 55 | dt += step 56 | record['course'] = random.choice(courses) 57 | record['active_users'] = random.randint(1, 10) 58 | record['date_time'] = dt.strftime('%Y-%m-%d %H:%M:%S') 59 | response = client.put_record( 60 | DeliveryStreamName=DeliveryStreamName, 61 | Record={ 62 | 'Data': json.dumps(record) 63 | } 64 | ) 65 | print json.dumps(record) 66 | -------------------------------------------------------------------------------- /kinesis-lab/firehose-agent.json: -------------------------------------------------------------------------------- 1 | { 2 | "cloudwatch.emitMetrics": true, 3 | "firehose.endpoint": "firehose.us-east-1.amazonaws.com", 4 | "flows": [ 5 | { 6 | "filePattern": "/home/linuxacademy/apache.log*", 7 | "deliveryStream": "firehose-1", 8 | "partitionKeyOption": "RANDOM", 9 | "initialPosition":"START_OF_FILE" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /kinesis-lab/firehose-and-streams-agent.json: -------------------------------------------------------------------------------- 1 | { 2 | "cloudwatch.emitMetrics": true, 3 | "firehose.endpoint": "firehose.us-east-1.amazonaws.com", 4 | "kinesis.endpoint": "kinesis.us-east-1.amazonaws.com", 5 | 6 | "flows": [ 7 | { 8 | "filePattern": "/home/linuxacademy/apache.log*", 9 | "deliveryStream": "firehose-1", 10 | "partitionKeyOption": "RANDOM", 11 | "initialPosition":"START_OF_FILE", 12 | "dataProcessingOptions": [ 13 | { 14 | "optionName": "LOGTOJSON", 15 | "logFormat": "COMMONAPACHELOG" 16 | } 17 | ] 18 | }, 19 | { 20 | "filePattern": "/home/linuxacademy/apache.log*", 21 | "kinesisStream": "kinesis-1", 22 | "partitionKeyOption": "RANDOM", 23 | "initialPosition":"START_OF_FILE", 24 | "dataProcessingOptions": [ 25 | { 26 | "optionName": "LOGTOJSON", 27 | "logFormat": "COMMONAPACHELOG" 28 | } 29 | ] 30 | } 31 | 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /kinesis-lab/firehose-transform-agent.json: -------------------------------------------------------------------------------- 1 | { 2 | "cloudwatch.emitMetrics": true, 3 | "firehose.endpoint": "firehose.us-east-1.amazonaws.com", 4 | "flows": [ 5 | { 6 | "filePattern": "/home/linuxacademy/apache.log*", 7 | "deliveryStream": "firehose-1", 8 | "partitionKeyOption": "RANDOM", 9 | "initialPosition":"START_OF_FILE", 10 | "dataProcessingOptions": [ 11 | { 12 | "optionName": "LOGTOJSON", 13 | "logFormat": "COMMONAPACHELOG" 14 | } 15 | ] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /kinesis-lab/read-kinesis-stream.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | import json 3 | from datetime import datetime 4 | import time 5 | 6 | stream_name = 'kinesis-1' 7 | 8 | kinesis_client = boto3.client('kinesis', region_name='us-east-1') 9 | 10 | ## describe_stream to get the shard 11 | response = kinesis_client.describe_stream(StreamName=stream_name) 12 | shard_id = response['StreamDescription']['Shards'][0]['ShardId'] 13 | 14 | shard_iterator = kinesis_client.get_shard_iterator( 15 | StreamName=stream_name, 16 | ShardId=shard_id, 17 | ShardIteratorType='TRIM_HORIZON' 18 | ) 19 | 20 | my_shard_iterator = shard_iterator['ShardIterator'] 21 | 22 | record_response = kinesis_client.get_records( 23 | ShardIterator=my_shard_iterator, 24 | Limit=1 25 | ) 26 | 27 | 28 | while 'NextShardIterator' in record_response: 29 | record_response = kinesis_client.get_records( 30 | ShardIterator=record_response['NextShardIterator'], 31 | Limit=1 32 | ) 33 | try: 34 | print record_response['Records'][0]['Data'] 35 | except Exception: 36 | print "No data yet." 37 | 38 | 39 | time.sleep(1) 40 | -------------------------------------------------------------------------------- /kinesis-lab/write-to-kinesis-firehose.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | from faker import Faker 3 | import random 4 | import time 5 | import json 6 | 7 | DeliveryStreamName = 'linuxacademy-courses' 8 | 9 | client = boto3.client('firehose') 10 | 11 | fake = Faker() 12 | 13 | courses = [ 14 | "Linux+ LPIC Level 1 Exam 1", 15 | "Linux+ LPIC Level 1 Exam 2", 16 | "LPIC Level 2 Exam 201", 17 | "Mastering The Linux Command Line", 18 | "AWS Certified Developer - Associate Level ", 19 | "AWS Certified SysOps Administrator - Associate Level", 20 | "Introduction To Android Development", 21 | "OpenStack Essentials", 22 | "Learning Chef DevOps Deployment", 23 | "Docker Deep Dive ", 24 | "Learning Puppet DevOps Deployment (Puppet Professional Cert)", 25 | "AWS Certified DevOps Engineer - Professional Level", 26 | "Git and Git lab - Start to Finish", 27 | "Learning Vagrant ", 28 | "Linux Essentials Certification", 29 | "Linux Academy Red Hat Certified Systems Administrator Prep Course", 30 | "Nginx And The LEMP Stack", 31 | "Linux Security Essentials", 32 | "Jenkins and Build Automation", 33 | "Linux Foundation Certified Systems Administrator (Legacy)", 34 | "AWS Certified Solutions Architect - Associate Level", 35 | "AWS Certified Solutions Architect - Professional Level", 36 | "DevOps Essentials", 37 | "OpenStack MCA100 - Associates Certification", 38 | "Apache Tomcat 8 Application Server", 39 | "Deploying MariaDB Or MySQL On VPC EC2 From Scratch With Replication", 40 | "Linux Academy Red Hat Certified Engineer Prep Course", 41 | "SQL Primer", 42 | "Apache JBOSS Administration", 43 | "Learning Python 2.7 Development", 44 | "Machine Learning with Azure", 45 | "Amazon Machine Learning", 46 | "Azure IoT Essentials", 47 | "Nagios Certified Professional" 48 | ] 49 | 50 | 51 | 52 | 53 | record = {} 54 | while True: 55 | record['user'] = fake.name() 56 | record['course'] = random.choice(courses) 57 | record['video'] = random.randint(1, 10) 58 | record['timestamp'] = time.time() 59 | response = client.put_record( 60 | DeliveryStreamName=DeliveryStreamName, 61 | Record={ 62 | 'Data': json.dumps(record) 63 | } 64 | ) 65 | print('PUTTING RECORD TO KINESIS: \n' + str(record)) 66 | --------------------------------------------------------------------------------