public static async Task DropAthenaTables(this StateMachineQueryContext context, AWSAthenaAPI athenaApi)
 {
     foreach (var dropping in context.settings.DroppingTables)
     {
         await DropAthenaTable(athenaApi, dropping);
     }
 }
 public static async Task LoadPartitions(this StateMachineQueryContext context, AWSAthenaAPI athenaApi)
 {
     //Console.WriteLine("LoadPartitions:");
     foreach (var patition in context.settings.Partitions)
     {
         await LoadAthenaParition(athenaApi, context.settings.DefaultTableName, patition.Key, patition.Value);
     }
 }
 public static async Task ClearTempTables(this StateMachineQueryContext context, AWSAthenaAPI athenaApi, AWSS3API awsS3Api)
 {
     foreach (var clearing in context.settings.Clearings)
     {
         await athenaApi.ClearAthenaTable(awsS3Api, clearing.Key, clearing.Value);
     }
     context.settings.Clearings.Clear();
 }
 public static void Print(this StateMachineQueryContext context)
 {
     context.state.Print();
     Debug.WriteLine($"SQL Query: {context.query}");
     if (!context.state.Any())
     {
         Debug.WriteLine($"*** End of Pipes ***");
     }
 }
        public static async Task ClearAthenaTables(this StateMachineQueryContext context, AWSAthenaAPI athenaApi, AWSS3API awsS3Api)
        {
            var parserSetting = context.BuildParserSetting();
            var pipes         = context.raw.ParseAthenaPipes(parserSetting);

            foreach (var clearing in parserSetting.Clearings)
            {
                await athenaApi.ClearAthenaTable(awsS3Api, clearing.Key, clearing.Value);
            }
        }
        public static AthenaParserSetting BuildParserSetting(this StateMachineQueryContext context)
        {
            StateMachineSettings settings      = context.settings;
            AthenaParserSetting  parserSetting = new AthenaParserSetting();

            parserSetting.DefaultExportPath = settings.DefaultExportPath;
            parserSetting.DefaultTableName  = settings.DefaultTableName;
            parserSetting.Date          = settings.Date;
            parserSetting.DateFormat    = settings.DateFormat;
            parserSetting.TempDatabase  = settings.TempDatabase;
            parserSetting.TempTablePath = settings.TempTablePath;
            return(parserSetting);
        }
 public static void RunWithResult(this StateMachineQueryContext context, StateMachineQueryResult result)
 {
     context.result = result;
     context.ExecuteStateMachineQueryContext();
     if (context.settings.Variables != null && context.settings.Variables.Any())
     {
         Debug.WriteLine("Context Variables:");
         foreach (var kv in context.settings.Variables)
         {
             Debug.WriteLine($"    Variable: {kv.Key} -> {kv.Value}");
         }
     }
     context.Print();
 }
Example #8
0
        public async void StateQueryTests()
        {
            int i = 0;
            StateMachineExecutionResult result;
            StateMachineQueryContext    context;
            {
                i = 1;
                AthenaParserSetting athenaParserLogger = new AthenaParserSetting();
                Debug.WriteLine($"****** Begin File {i} ******");
                var filename = $"{AppContext.BaseDirectory}/query{i}.sql";
                Debug.WriteLine($"File {i}: {filename}");
                var query = File.ReadAllText(filename);
                try
                {
                    var pipes = query.ParseAthenaPipes(athenaParserLogger);
                    Debug.WriteLine($"****** End File {i} ******");
                    Debug.WriteLine($"****** Json File {i} ******");
                    var tree = JsonConvert.SerializeObject(pipes, Formatting.Indented);
                    Debug.WriteLine($"****** Parsed File {i} ******");

                    bool seeking = false;
                    context = new StateMachineQueryContext();

                    // context.ExecuteStateMachineQueryContext()

                    result  = pipes.LoadNextStateMachineQuery(new AthenaParserSetting(), new LinkedList <int>(), context, ref seeking);
                    seeking = true;
                    result  = pipes.LoadNextStateMachineQuery(new AthenaParserSetting(), new LinkedList <int>(), context, ref seeking);
                    Debug.WriteLine(pipes.ToQueryString().StripEmptyLines());
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(athenaParserLogger.ToString());
                    Debug.Write(ex.Message);
                }
            }
        }
        public static StateMachineQueryContext BuildStateMachineQueryContext(this EtlSettings etlSettings, DateTime?useDate = null)
        {
            if (etlSettings.SourceType != EtlSourceEnum.AmazonAthenaPipes)
            {
                return(null);
            }

            var pipesSource = etlSettings.AthenaQueryPipesSource;

            AthenaParserSetting parserSetting = new AthenaParserSetting();

            parserSetting.DefaultExportPath = $"s3://{etlSettings.TargetS3BucketName}/{etlSettings.TargetS3Prefix}".FixPathEnd();
            parserSetting.DefaultTableName  = $"`{etlSettings.AthenaDatabaseName}`.`{etlSettings.AthenaTableName}`";
            parserSetting.Date = useDate == null?DateTime.UtcNow.AddDays(-pipesSource.DaysAgo) : useDate.Value.AddDays(-pipesSource.DaysAgo);

            parserSetting.DateFormat    = pipesSource.DateFormat;
            parserSetting.TempDatabase  = pipesSource.TempDatabase;
            parserSetting.TempTablePath = pipesSource.TempDataPath.FixPathEnd();

            var caches = JsonConvert.DeserializeObject <List <CacheSetting> >(etlSettings.AthenaQueryPipesSource.Caches);

            foreach (var cache in caches)
            {
                if (!cache.S3Path.EndsWith("/"))
                {
                    cache.S3Path += "/";
                }
                parserSetting.Caches.Add(cache.Key, cache);
            }

            StateMachineQueryContext context = new StateMachineQueryContext();

            context.raw = pipesSource.AthenaSQL;

            context.settings = new StateMachineSettings()
            {
                DefaultExportPath = parserSetting.DefaultExportPath,
                DefaultTableName  = parserSetting.DefaultTableName,
                Date          = parserSetting.Date,
                DateFormat    = parserSetting.DateFormat,
                TempDatabase  = parserSetting.TempDatabase,
                TempTablePath = parserSetting.TempTablePath,
                Caches        = parserSetting.Caches.Values.ToList(),
                Clearings     = parserSetting.Clearings.Select(kvp => new KeyValueEntry()
                {
                    Key = kvp.Key, Value = kvp.Value
                }).ToList(),
                Commands       = parserSetting.Commands,
                DroppingTables = parserSetting.DroppingTables,
                Partitions     = parserSetting.Partitions.Select(kvp => new KeyValueEntry()
                {
                    Key = kvp.Key, Value = kvp.Value
                }).ToList(),
                Variables = parserSetting.Variables.Select(kvp => new KeyValueEntry()
                {
                    Key = kvp.Key, Value = kvp.Value
                }).ToList()
            };

            //var parsed = pipesSource.AthenaSQL.ParseAthenaPipes(parserSetting);

            return(context);

            //var athenaApi = etlSettings.CreatePipesSourceAthenaAPI();
            //foreach (var kvp in parserSetting.Partitions)
            //{
            //    await athenaApi.LoadPartitionIfNotExists(parserSetting.DefaultTableName, kvp.Key, kvp.Value);
            //}
        }